Initial commit
Dieser Commit ist enthalten in:
318
views/tabs/generator_tab.py
Normale Datei
318
views/tabs/generator_tab.py
Normale Datei
@ -0,0 +1,318 @@
|
||||
# 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"])
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren