""" Controller für die Verwaltung von Einstellungen. """ import logging import random from PyQt5.QtWidgets import QMessageBox from PyQt5.QtCore import QObject logger = logging.getLogger("settings_controller") class SettingsController(QObject): """Controller für die Verwaltung von Einstellungen.""" def __init__(self, proxy_rotator, email_handler, license_manager): super().__init__() self.proxy_rotator = proxy_rotator self.email_handler = email_handler self.license_manager = license_manager self.parent_view = None def set_parent_view(self, view): """Setzt die übergeordnete View für Dialoge.""" self.parent_view = view def load_proxy_settings(self): """Lädt die Proxy-Einstellungen.""" try: proxy_config = self.proxy_rotator.get_config() or {} settings = { "ipv4_proxies": proxy_config.get("ipv4", []), "ipv6_proxies": proxy_config.get("ipv6", []), "mobile_proxies": proxy_config.get("mobile", []), "mobile_api": proxy_config.get("mobile_api", {}) } return settings except Exception as e: logger.error(f"Fehler beim Laden der Proxy-Einstellungen: {e}") return {} def save_proxy_settings(self, settings): """Speichert die Proxy-Einstellungen.""" try: # IPv4 Proxies ipv4_proxies = settings.get("ipv4_proxies", []) if isinstance(ipv4_proxies, str): ipv4_proxies = [line.strip() for line in ipv4_proxies.splitlines() if line.strip()] # IPv6 Proxies ipv6_proxies = settings.get("ipv6_proxies", []) if isinstance(ipv6_proxies, str): ipv6_proxies = [line.strip() for line in ipv6_proxies.splitlines() if line.strip()] # Mobile Proxies mobile_proxies = settings.get("mobile_proxies", []) if isinstance(mobile_proxies, str): mobile_proxies = [line.strip() for line in mobile_proxies.splitlines() if line.strip()] # API Keys mobile_api = settings.get("mobile_api", {}) # Konfiguration aktualisieren self.proxy_rotator.update_config({ "ipv4": ipv4_proxies, "ipv6": ipv6_proxies, "mobile": mobile_proxies, "mobile_api": mobile_api }) logger.info("Proxy-Einstellungen gespeichert") if self.parent_view: QMessageBox.information( self.parent_view, "Erfolg", "Proxy-Einstellungen wurden gespeichert." ) return True except Exception as e: logger.error(f"Fehler beim Speichern der Proxy-Einstellungen: {e}") if self.parent_view: QMessageBox.critical( self.parent_view, "Fehler", f"Proxy-Einstellungen konnten nicht gespeichert werden:\n{str(e)}" ) return False def test_proxy(self, proxy_type): """Testet einen zufälligen Proxy des ausgewählten Typs.""" try: # Überprüfe, ob Proxies konfiguriert sind proxies = self.proxy_rotator.get_proxies_by_type(proxy_type) if not proxies: if self.parent_view: QMessageBox.warning( self.parent_view, "Keine Proxies", f"Keine {proxy_type.upper()}-Proxies konfiguriert.\nBitte fügen Sie Proxies in den Einstellungen hinzu." ) return False # Zufälligen Proxy auswählen proxy = random.choice(proxies) # Proxy testen result = self.proxy_rotator.test_proxy(proxy_type) if result["success"]: if self.parent_view: QMessageBox.information( self.parent_view, "Proxy-Test erfolgreich", f"IP: {result['ip']}\nLand: {result['country'] or 'Unbekannt'}\nAntwortzeit: {result['response_time']:.2f}s" ) return True else: if self.parent_view: QMessageBox.warning( self.parent_view, "Proxy-Test fehlgeschlagen", f"Fehler: {result['error']}" ) return False except Exception as e: logger.error(f"Fehler beim Testen des Proxy: {e}") if self.parent_view: QMessageBox.critical( self.parent_view, "Fehler", f"Fehler beim Testen des Proxy:\n{str(e)}" ) return False def load_email_settings(self): """Lädt die E-Mail-Einstellungen.""" try: email_config = self.email_handler.get_config() or {} settings = { "imap_server": email_config.get("imap_server", ""), "imap_port": email_config.get("imap_port", 993), "imap_user": email_config.get("imap_user", ""), "imap_pass": email_config.get("imap_pass", "") } return settings except Exception as e: logger.error(f"Fehler beim Laden der E-Mail-Einstellungen: {e}") return {} def save_email_settings(self, settings): """Speichert die E-Mail-Einstellungen.""" try: # Einstellungen aktualisieren self.email_handler.update_config(settings) logger.info("E-Mail-Einstellungen gespeichert") if self.parent_view: QMessageBox.information( self.parent_view, "Erfolg", "E-Mail-Einstellungen wurden gespeichert." ) return True except Exception as e: logger.error(f"Fehler beim Speichern der E-Mail-Einstellungen: {e}") if self.parent_view: QMessageBox.critical( self.parent_view, "Fehler", f"E-Mail-Einstellungen konnten nicht gespeichert werden:\n{str(e)}" ) return False def test_email(self, settings=None): """Testet die E-Mail-Verbindung.""" try: if settings: # Temporär Einstellungen aktualisieren self.email_handler.update_credentials( settings.get("imap_user", ""), settings.get("imap_pass", "") ) self.email_handler.update_server( settings.get("imap_server", ""), settings.get("imap_port", 993) ) # Verbindung testen result = self.email_handler.test_connection() if result["success"]: if self.parent_view: QMessageBox.information( self.parent_view, "E-Mail-Test erfolgreich", f"Verbindung zu {result['server']}:{result['port']} hergestellt.\nGefundene Postfächer: {result['mailbox_count']}" ) return True else: if self.parent_view: QMessageBox.warning( self.parent_view, "E-Mail-Test fehlgeschlagen", f"Fehler: {result['error']}" ) return False except Exception as e: logger.error(f"Fehler beim Testen der E-Mail-Verbindung: {e}") if self.parent_view: QMessageBox.critical( self.parent_view, "Fehler", f"Fehler beim Testen der E-Mail-Verbindung:\n{str(e)}" ) return False def load_license_info(self): """Lädt die Lizenzinformationen.""" try: license_info = self.license_manager.get_license_info() return license_info except Exception as e: logger.error(f"Fehler beim Laden der Lizenzinformationen: {e}") return {} def activate_license(self, license_key): """Aktiviert eine Lizenz.""" try: success, message = self.license_manager.activate_license(license_key) if success: if self.parent_view: QMessageBox.information( self.parent_view, "Lizenz aktiviert", message ) else: if self.parent_view: QMessageBox.warning( self.parent_view, "Lizenzaktivierung fehlgeschlagen", message ) return success, message except Exception as e: logger.error(f"Fehler bei der Lizenzaktivierung: {e}") if self.parent_view: QMessageBox.critical( self.parent_view, "Fehler", f"Fehler bei der Lizenzaktivierung:\n{str(e)}" ) return False, str(e) def check_license(self): """Überprüft, ob eine gültige Lizenz vorhanden ist.""" try: is_licensed = self.license_manager.is_licensed() if not is_licensed and self.parent_view: license_info = self.license_manager.get_license_info() status = license_info.get("status_text", "Inaktiv") QMessageBox.warning( self.parent_view, "Keine gültige Lizenz", f"Status: {status}\n\nBitte aktivieren Sie eine Lizenz, um die Software zu nutzen." ) return is_licensed except Exception as e: logger.error(f"Fehler bei der Lizenzprüfung: {e}") return False