Facebook - Workflow geht aber Popup nicht da mit Browser nicht anbtouchen
Dieser Commit ist enthalten in:
@ -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")
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren