Insta geht wieder, wegen dem Domain Umzug

Dieser Commit ist enthalten in:
Claude Project Manager
2025-11-27 21:17:32 +01:00
Ursprung 2d276f167c
Commit 8e4a052b6c
16 geänderte Dateien mit 208 neuen und 38 gelöschten Zeilen

Datei anzeigen

@ -277,6 +277,37 @@ class BasePlatformController(QObject):
"""
generator_tab = self.get_generator_tab()
generator_tab.set_running(False)
# Standard-Implementierung - kann von Unterklassen erweitert werden
self.logger.info(f"Account erfolgreich erstellt für {self.platform_name}")
self.logger.info(f"Account erfolgreich erstellt für {self.platform_name}")
def stop_account_creation(self):
"""
Stoppt die Account-Erstellung (Default-Implementierung).
Diese Methode kann von Unterklassen überschrieben werden für spezielle Anforderungen.
Sie stellt sicher dass:
1. Der Process Guard freigegeben wird
2. Der Worker-Thread gestoppt wird
3. Die UI zurückgesetzt wird
4. Dialoge geschlossen werden
"""
# Guard-Freigabe (wichtig: VOR Worker-Stop)
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked():
guard.end(success=False)
self.logger.info("Guard freigegeben bei Stop (BaseController)")
# Worker stoppen falls vorhanden
if self.worker_thread and self.worker_thread.isRunning():
self.worker_thread.stop()
generator_tab = self.get_generator_tab()
generator_tab.add_log(f"{self.platform_name}-Account-Erstellung wurde abgebrochen")
generator_tab.set_running(False)
generator_tab.set_progress(0)
# Forge-Dialog schließen falls vorhanden
if hasattr(self, 'forge_dialog') and self.forge_dialog:
self.forge_dialog.close()
self.forge_dialog = None

Datei anzeigen

@ -283,6 +283,24 @@ class BaseAccountCreationWorkerThread(QThread):
return save_result
def stop(self):
"""Stoppt den Thread"""
"""
Stoppt den Thread sauber mit Guard-Freigabe.
WICHTIG: Guard wird SOFORT freigegeben, da terminate() den finally-Block überspringt.
"""
import logging
logger = logging.getLogger(__name__)
self.running = False
# Guard SOFORT freigeben bevor terminate()
# Grund: terminate() überspringt den finally-Block in run()
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked():
guard.end(success=False)
logger.info("Guard freigegeben bei Worker-Stop (vor terminate)")
# Jetzt Thread beenden
self.terminate()
self.wait(2000) # Warte max 2 Sekunden auf sauberes Ende

Datei anzeigen

@ -287,7 +287,15 @@ class FacebookController(BasePlatformController):
self.forge_dialog = None
def stop_account_creation(self):
"""Stoppt die Facebook-Account-Erstellung."""
"""Stoppt die Facebook-Account-Erstellung mit Guard-Freigabe."""
# Guard-Freigabe (wichtig: VOR Worker-Stop)
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked():
guard.end(success=False)
self.logger.info("Guard freigegeben bei Facebook Stop")
# Worker stoppen
if self.worker_thread and self.worker_thread.isRunning():
self.worker_thread.stop()
generator_tab = self.get_generator_tab()

Datei anzeigen

@ -198,16 +198,25 @@ class GmailController(BasePlatformController):
logger.info(f"[GMAIL] start_account_creation abgeschlossen")
def stop_account_creation(self):
"""Stoppt die laufende Account-Erstellung"""
"""Stoppt die laufende Account-Erstellung mit Guard-Freigabe"""
logger.info("[GMAIL] Stoppe Account-Erstellung")
# Guard-Freigabe (wichtig: VOR Worker-Stop)
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked():
guard.end(success=False)
logger.info("Guard freigegeben bei Gmail Stop")
# Worker stoppen
if self.worker_thread and self.worker_thread.isRunning():
self.worker_thread.stop()
self.worker_thread.wait()
# Dialog schließen
if hasattr(self, 'forge_dialog') and self.forge_dialog:
self.forge_dialog.close()
# UI zurücksetzen
generator_tab = self.get_generator_tab()
generator_tab.set_running(False)

Datei anzeigen

@ -269,14 +269,22 @@ class InstagramController(BasePlatformController):
self.forge_dialog.show()
def stop_account_creation(self):
"""Stoppt die Instagram-Account-Erstellung."""
"""Stoppt die Instagram-Account-Erstellung mit Guard-Freigabe."""
# Guard-Freigabe (wichtig: VOR Worker-Stop)
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked():
guard.end(success=False)
self.logger.info("Guard freigegeben bei Instagram Stop")
# Worker stoppen
if self.worker_thread and self.worker_thread.isRunning():
self.worker_thread.stop()
generator_tab = self.get_generator_tab()
generator_tab.add_log("Account-Erstellung wurde abgebrochen")
generator_tab.set_running(False)
generator_tab.set_progress(0)
# Forge-Dialog schließen falls vorhanden
if hasattr(self, 'forge_dialog') and self.forge_dialog:
self.forge_dialog.close()

Datei anzeigen

@ -131,14 +131,22 @@ class OkRuController(BasePlatformController):
self.forge_dialog.show()
def stop_account_creation(self):
"""Stoppt die OK.ru-Account-Erstellung."""
"""Stoppt die OK.ru-Account-Erstellung mit Guard-Freigabe."""
# Guard-Freigabe (wichtig: VOR Worker-Stop)
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked():
guard.end(success=False)
self.logger.info("Guard freigegeben bei OK.ru Stop")
# Worker stoppen
if self.worker_thread and self.worker_thread.isRunning():
self.worker_thread.stop()
generator_tab = self.get_generator_tab()
generator_tab.add_log("Account-Erstellung wurde abgebrochen")
generator_tab.set_running(False)
generator_tab.set_progress(0)
# Forge-Dialog schließen falls vorhanden
if hasattr(self, 'forge_dialog') and self.forge_dialog:
self.forge_dialog.close()

Datei anzeigen

@ -273,14 +273,22 @@ class TikTokController(BasePlatformController):
self.forge_dialog.show()
def stop_account_creation(self):
"""Stoppt die TikTok-Account-Erstellung."""
"""Stoppt die TikTok-Account-Erstellung mit Guard-Freigabe."""
# Guard-Freigabe (wichtig: VOR Worker-Stop)
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked():
guard.end(success=False)
self.logger.info("Guard freigegeben bei TikTok Stop")
# Worker stoppen
if self.worker_thread and self.worker_thread.isRunning():
self.worker_thread.stop()
generator_tab = self.get_generator_tab()
generator_tab.add_log("Account-Erstellung wurde abgebrochen")
generator_tab.set_running(False)
generator_tab.set_progress(0)
# Forge-Dialog schließen falls vorhanden
if hasattr(self, 'forge_dialog') and self.forge_dialog:
self.forge_dialog.close()

Datei anzeigen

@ -271,14 +271,22 @@ class XController(BasePlatformController):
self.forge_dialog.show()
def stop_account_creation(self):
"""Stoppt die X-Account-Erstellung."""
"""Stoppt die X-Account-Erstellung mit Guard-Freigabe."""
# Guard-Freigabe (wichtig: VOR Worker-Stop)
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked():
guard.end(success=False)
self.logger.info("Guard freigegeben bei X Stop")
# Worker stoppen
if self.worker_thread and self.worker_thread.isRunning():
self.worker_thread.stop()
generator_tab = self.get_generator_tab()
generator_tab.add_log("Account-Erstellung wurde abgebrochen")
generator_tab.set_running(False)
generator_tab.set_progress(0)
# Forge-Dialog schließen falls vorhanden
if hasattr(self, 'forge_dialog') and self.forge_dialog:
self.forge_dialog.close()

Datei anzeigen

@ -129,18 +129,18 @@ class SessionController(QObject):
self.login_failed.emit(account_id, str(e))
def _cancel_login(self, account_id: str):
"""Bricht den Login-Prozess ab"""
"""Bricht den Login-Prozess ab mit Guard-Freigabe"""
logger.info(f"Login für Account {account_id} wurde abgebrochen")
# Feature 5: Guard freigeben bei Cancel
# HINWEIS: Worker Thread gibt Guard in seinem finally-Block frei
# Nur freigeben wenn Worker noch nicht gestartet (Guard locked aber kein Worker)
# Guard IMMER freigeben bei Cancel (einfacher + robuster)
# Doppelte Freigabe ist kein Problem (wird von ProcessGuard ignoriert)
from utils.process_guard import get_guard
guard = get_guard()
if guard.is_locked() and not (hasattr(self, 'login_worker') and self.login_worker and self.login_worker.isRunning()):
logger.warning("Guard war locked aber Worker nicht aktiv - gebe Guard frei")
if guard.is_locked():
guard.end(success=False)
logger.info("Guard freigegeben bei Login-Cancel")
# Dialog schließen
if hasattr(self, 'login_dialog') and self.login_dialog:
self.login_dialog.close()
self.login_dialog = None