# Pfad: views/tabs/generator_tab_simple.py """ Vereinfachter Tab zur Erstellung von Social-Media-Accounts ohne Log-Widget. """ import logging from PyQt5.QtWidgets import ( QWidget, QVBoxLayout, QHBoxLayout, QFormLayout, QGridLayout, QGroupBox, QLabel, QLineEdit, QSpinBox, QRadioButton, QCheckBox, QComboBox, QPushButton, QProgressBar, QMessageBox, QSizePolicy, QSpacerItem ) from PyQt5.QtCore import Qt, pyqtSignal logger = logging.getLogger("generator_tab") class GeneratorTab(QWidget): """Widget für den Account-Generator-Tab ohne Log.""" # Signale start_requested = pyqtSignal(dict) stop_requested = pyqtSignal() account_created = pyqtSignal(str, dict) # (platform, account_data) def __init__(self, platform_name, language_manager=None): super().__init__() self.platform_name = platform_name self.language_manager = language_manager self.init_ui() if self.language_manager: self.language_manager.language_changed.connect(self.update_texts) self.update_texts() def init_ui(self): """Initialisiert die Benutzeroberfläche.""" layout = QVBoxLayout(self) layout.setContentsMargins(20, 20, 20, 20) layout.setSpacing(20) # Formularbereich - mit Grid-Layout für bessere Anordnung self.form_group = QGroupBox() grid_layout = QGridLayout() grid_layout.setHorizontalSpacing(15) grid_layout.setVerticalSpacing(10) self.form_group.setLayout(grid_layout) # Zeile 0: Vorname und Nachname self.first_name_label = QLabel() self.first_name_input = QLineEdit() grid_layout.addWidget(self.first_name_label, 0, 0) grid_layout.addWidget(self.first_name_input, 0, 1) self.last_name_label = QLabel() self.last_name_input = QLineEdit() grid_layout.addWidget(self.last_name_label, 0, 2) grid_layout.addWidget(self.last_name_input, 0, 3) # Zeile 1: Alter self.age_label = QLabel() self.age_input = QLineEdit() self.age_input.setMaximumWidth(100) grid_layout.addWidget(self.age_label, 1, 0) grid_layout.addWidget(self.age_input, 1, 1) # Plattformspezifische Parameter hinzufügen self.add_platform_specific_fields(grid_layout) # Formular zum Layout hinzufügen layout.addWidget(self.form_group) # Fortschrittsanzeige self.progress_bar = QProgressBar() self.progress_bar.setRange(0, 100) self.progress_bar.setValue(0) self.progress_bar.setMaximumHeight(20) self.progress_bar.setMinimumWidth(300) self.progress_bar.hide() # Versteckt bis zur Nutzung layout.addWidget(self.progress_bar) # Buttons button_layout = QHBoxLayout() button_layout.addStretch() self.start_button = QPushButton() self.start_button.setMinimumWidth(150) self.start_button.clicked.connect(self.on_start_clicked) self.stop_button = QPushButton() self.stop_button.setMinimumWidth(150) self.stop_button.clicked.connect(self.on_stop_clicked) self.stop_button.setEnabled(False) button_layout.addWidget(self.start_button) button_layout.addWidget(self.stop_button) layout.addLayout(button_layout) # Spacer am Ende layout.addStretch() # Event-Verbindungen entfernt - Registrierung erfolgt immer per Email def add_platform_specific_fields(self, grid_layout): """ Fügt plattformspezifische Felder hinzu. """ platform = self.platform_name.lower() current_row = 2 # Nach den Standard-Feldern (nur Name und Alter) def on_start_clicked(self): """Wird aufgerufen, wenn der Start-Button geklickt wird.""" # Parameter sammeln params = self.get_params() # Eingaben validieren valid, error_msg = self.validate_inputs(params) if not valid: self.show_error(error_msg) return # Status aktualisieren self.set_status("Starte Account-Erstellung...") # Signal auslösen self.start_requested.emit(params) def on_stop_clicked(self): """Wird aufgerufen, wenn der Stop-Button geklickt wird.""" self.stop_requested.emit() def get_params(self): """Sammelt alle Parameter für die Account-Erstellung.""" # Vorname und Nachname kombinieren für den vollständigen Namen first_name = self.first_name_input.text().strip() last_name = self.last_name_input.text().strip() full_name = f"{first_name} {last_name}" params = { "first_name": first_name, "last_name": last_name, "full_name": full_name, "age_text": self.age_input.text().strip(), "registration_method": "email", # Immer Email-Registrierung "headless": False, # Browser immer sichtbar "debug": True, # Debug ist jetzt immer aktiviert "email_domain": "z5m7q9dk3ah2v1plx6ju.com" # Fest eingestellt } # Proxy ist jetzt immer deaktiviert params["use_proxy"] = False # Plattformspezifische Parameter additional_params = self.get_platform_specific_params() if additional_params: params["additional_params"] = additional_params return params def validate_inputs(self, params): """ Validiert die Eingaben für die Account-Erstellung. Returns: tuple: (gültig, Fehlermeldung) """ # Namen prüfen if not params.get("first_name"): msg = "Bitte geben Sie einen Vornamen ein." if self.language_manager: msg = self.language_manager.get_text( "generator_tab.first_name_error", "Bitte geben Sie einen Vornamen ein.", ) return False, msg if not params.get("last_name"): msg = "Bitte geben Sie einen Nachnamen ein." if self.language_manager: msg = self.language_manager.get_text( "generator_tab.last_name_error", "Bitte geben Sie einen Nachnamen ein.", ) return False, msg # Alter prüfen age_text = params.get("age_text", "") if not age_text: msg = "Bitte geben Sie ein Alter ein." if self.language_manager: msg = self.language_manager.get_text( "generator_tab.age_empty_error", "Bitte geben Sie ein Alter ein.", ) return False, msg # Alter muss eine Zahl sein try: age = int(age_text) params["age"] = age except ValueError: msg = "Das Alter muss eine ganze Zahl sein." if self.language_manager: msg = self.language_manager.get_text( "generator_tab.age_int_error", "Das Alter muss eine ganze Zahl sein.", ) return False, msg # Alter-Bereich prüfen if age < 13 or age > 99: msg = "Das Alter muss zwischen 13 und 99 liegen." if self.language_manager: msg = self.language_manager.get_text( "generator_tab.age_range_error", "Das Alter muss zwischen 13 und 99 liegen.", ) return False, msg # Telefonnummer-Validierung entfernt - nur Email-Registrierung return True, "" def get_platform_specific_params(self): """ Gibt plattformspezifische Parameter zurück. """ platform = self.platform_name.lower() additional_params = {} return additional_params def set_running(self, running: bool): """Setzt den Status auf 'Wird ausgeführt' oder 'Bereit'.""" self.start_button.setEnabled(not running) self.stop_button.setEnabled(running) if running: self.set_status("Läuft...") else: self.progress_bar.setValue(0) self.progress_bar.hide() def set_progress(self, value: int): """Setzt den Fortschritt der Fortschrittsanzeige.""" if value > 0: self.progress_bar.show() self.progress_bar.setValue(value) if value >= 100: self.progress_bar.hide() def set_status(self, message: str): """Setzt die Statusnachricht.""" # Status-Label wurde entfernt # Log to console for debugging logger.info(f"Status: {message}") def show_error(self, message: str): """Zeigt eine Fehlermeldung an.""" title = "Fehler" if self.language_manager: title = self.language_manager.get_text( "generator_tab.error_title", "Fehler" ) else: title = "Fehler" from views.widgets.modern_message_box import show_error show_error(self, title, message) self.set_status("Fehler aufgetreten") def show_success(self, message: str): """Zeigt eine Erfolgsmeldung an.""" title = "Erfolg" if self.language_manager: title = self.language_manager.get_text( "generator_tab.success_title", "Erfolg" ) from views.widgets.modern_message_box import show_success show_success(self, title, message) self.set_status("Erfolgreich abgeschlossen") def update_texts(self): """Aktualisiert UI-Texte gemäß der aktuellen Sprache.""" if not self.language_manager: return lm = self.language_manager self.form_group.setTitle(lm.get_text("generator_tab.form_title", "Account-Informationen")) self.first_name_label.setText(lm.get_text("generator_tab.first_name_label", "Vorname:")) self.first_name_input.setPlaceholderText(lm.get_text("generator_tab.first_name_placeholder", "z.B. Max")) self.last_name_label.setText(lm.get_text("generator_tab.last_name_label", "Nachname:")) self.last_name_input.setPlaceholderText(lm.get_text("generator_tab.last_name_placeholder", "z.B. Mustermann")) self.age_label.setText(lm.get_text("generator_tab.age_label", "Alter:")) platform = self.platform_name.lower() self.start_button.setText(lm.get_text("buttons.create", "Account erstellen")) self.stop_button.setText(lm.get_text("buttons.cancel", "Abbrechen")) # Kompatibilitätsmethoden für bestehenden Code def clear_log(self): """Kompatibilitätsmethode - tut nichts, da kein Log vorhanden.""" pass def add_log(self, message: str): """Kompatibilitätsmethode - gibt an die Konsole aus.""" logger.info(message) def store_created_account(self, result_data: dict): """Speichert die erstellten Account-Daten.""" if "account_data" in result_data: self.account_created.emit(self.platform_name, result_data["account_data"])