Files
AccountForger-neuerUpload/controllers/settings_controller.py
Claude Project Manager 04585e95b6 Initial commit
2025-08-01 23:50:28 +02:00

295 Zeilen
10 KiB
Python

"""
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