Insta geht wieder, wegen dem Domain Umzug
Dieser Commit ist enthalten in:
@ -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
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren