Facebook - Workflow geht aber Popup nicht da mit Browser nicht anbtouchen

Dieser Commit ist enthalten in:
Claude Project Manager
2025-09-14 20:59:12 +02:00
Ursprung d0920d4078
Commit 4903dee3bc
10 geänderte Dateien mit 633 neuen und 182 gelöschten Zeilen

Datei anzeigen

@ -1,5 +1,5 @@
"""
Controller für Facebook-spezifische Funktionalität.
Controller für Facebook-spezifische Funktionalität.
Mit Fingerprint-Protection und Anti-Bot Features.
"""
@ -11,7 +11,8 @@ from typing import Dict, Any
from controllers.platform_controllers.base_controller import BasePlatformController
from controllers.platform_controllers.base_worker_thread import BaseAccountCreationWorkerThread
from views.tabs.facebook_generator_tab import FacebookGeneratorTab
from views.tabs.generator_tab import GeneratorTab # Verwende generischen GeneratorTab
from views.widgets.forge_animation_widget import ForgeAnimationDialog # Forge Dialog für Animation
from social_networks.facebook.facebook_automation import FacebookAutomation
from utils.birthday_generator import BirthdayGenerator
@ -108,7 +109,15 @@ class FacebookWorkerThread(BaseAccountCreationWorkerThread):
self.running = False
class FacebookController(BasePlatformController):
"""Controller für die Facebook-Plattform."""
"""Controller für die Facebook-Plattform."""
# Qt Signale für Kommunikation mit UI
status_update = pyqtSignal(str) # Status-Updates
log_message = pyqtSignal(str) # Log-Nachrichten
progress_update = pyqtSignal(int) # Fortschritt (0-100)
generation_started = pyqtSignal() # Generierung gestartet
generation_completed = pyqtSignal(dict) # Generierung abgeschlossen
generation_failed = pyqtSignal(str) # Generierung fehlgeschlagen
def __init__(self, db_manager=None, proxy_rotator=None, email_handler=None, language_manager=None):
super().__init__("Facebook", db_manager, proxy_rotator, email_handler, language_manager)
@ -117,13 +126,13 @@ class FacebookController(BasePlatformController):
def get_generator_tab(self):
"""
Erstellt und konfiguriert den Generator-Tab für Facebook.
Erstellt und konfiguriert den Generator-Tab für Facebook.
Returns:
FacebookGeneratorTab: Konfigurierter Tab für Facebook mit Geschlechtsauswahl
GeneratorTab: Konfigurierter Tab für Facebook mit Geschlechtsauswahl
"""
# Erstelle Facebook-spezifischen Generator-Tab mit Geschlechtsfeld
generator_tab = FacebookGeneratorTab(
# Erstelle generischen Generator-Tab
generator_tab = GeneratorTab(
"Facebook",
self.language_manager
)
@ -145,32 +154,52 @@ class FacebookController(BasePlatformController):
generator_tab: Der zu konfigurierende Tab
"""
# Facebook-spezifische Konfiguration
# Der FacebookGeneratorTab hat bereits das Geschlechtsfeld integriert
# Der GeneratorTab kann für Facebook-spezifische Felder erweitert werden
# Geschlecht wird aus den Parametern extrahiert
# Vor- und Nachnamen werden im Worker-Thread aus full_name extrahiert
logger.debug("Facebook-spezifische Felder konfiguriert (inkl. Geschlechtsauswahl)")
def handle_generation_request(self, params: Dict[str, Any]):
"""
Behandelt eine Anfrage zur Account-Generierung.
Behandelt eine Anfrage zur Account-Generierung mit Forge Dialog.
Args:
params: Parameter für die Generierung
params: Parameter für die Generierung
"""
logger.info(f"Facebook-Account-Generierung angefordert: {params}")
# Prüfe ob bereits ein Thread läuft
# Prüfe ob bereits ein Thread läuft
if self.worker_thread and self.worker_thread.isRunning():
logger.warning("Ein Account wird bereits erstellt")
return
# Facebook-spezifische Parameter hinzufügen
# Facebook-spezifische Parameter hinzufügen
params["platform"] = "facebook"
# Hole Generator Tab für Parent Widget
generator_tab = self.get_generator_tab()
# Schmiedeanimation-Dialog erstellen und anzeigen (wie TikTok)
parent_widget = generator_tab.window() # Hauptfenster als Parent
self.forge_dialog = ForgeAnimationDialog(parent_widget, "Facebook")
self.forge_dialog.cancel_clicked.connect(self.stop_generation)
self.forge_dialog.closed.connect(self.stop_generation)
# Fensterposition vom Hauptfenster holen
if parent_widget:
window_pos = parent_widget.pos()
params["window_position"] = (window_pos.x(), window_pos.y())
# Starte Worker-Thread
self.worker_thread = FacebookWorkerThread(params)
# Verbinde Signale
# Verbinde Signale mit Forge Dialog
self.worker_thread.update_signal.connect(self.forge_dialog.set_status)
self.worker_thread.log_signal.connect(self.forge_dialog.add_log)
self.worker_thread.progress_signal.connect(self.forge_dialog.set_progress)
# Zusätzlich an Controller-Signale für andere Komponenten
self.worker_thread.update_signal.connect(
lambda msg: self.status_update.emit(msg)
)
@ -190,6 +219,10 @@ class FacebookController(BasePlatformController):
# Starte Thread
self.worker_thread.start()
self.generation_started.emit()
# Dialog anzeigen und Animation starten
self.forge_dialog.start_animation()
self.forge_dialog.show()
def _handle_generation_success(self, result: Dict[str, Any]):
"""
@ -200,6 +233,11 @@ class FacebookController(BasePlatformController):
"""
logger.info("Facebook-Account erfolgreich erstellt")
# Forge-Dialog schließen
if hasattr(self, 'forge_dialog') and self.forge_dialog:
self.forge_dialog.close()
self.forge_dialog = None
# Speichere Account in Datenbank
if self.db_manager and result.get("account_data"):
account_data = result["account_data"]
@ -218,6 +256,16 @@ class FacebookController(BasePlatformController):
error_msg: Fehlermeldung
"""
logger.error(f"Fehler bei Facebook-Account-Erstellung: {error_msg}")
# Forge-Dialog schließen mit Fehlerbehandlung
if hasattr(self, 'forge_dialog') and self.forge_dialog:
try:
self.forge_dialog.close()
except RuntimeError as e:
logger.warning(f"Forge Dialog bereits geschlossen: {e}")
finally:
self.forge_dialog = None
self.generation_failed.emit(error_msg)
def stop_generation(self):
@ -226,8 +274,13 @@ class FacebookController(BasePlatformController):
logger.info("Stoppe Facebook-Account-Generierung")
self.worker_thread.stop()
self.worker_thread.wait()
# Forge-Dialog schließen falls vorhanden
if hasattr(self, 'forge_dialog') and self.forge_dialog:
self.forge_dialog.close()
self.forge_dialog = None
def cleanup(self):
"""Räumt Ressourcen auf."""
"""Räumt Ressourcen auf."""
self.stop_generation()
logger.info("Facebook Controller aufgeräumt")
logger.info("Facebook Controller aufgeräumt")