295 Zeilen
10 KiB
Python
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
|