From 2b00689961d1923db451bf94f5725faa0aa4cdea Mon Sep 17 00:00:00 2001 From: Loren Eteval Date: Tue, 18 Aug 2026 22:38:40 +0800 Subject: [PATCH] Unify connection runtime error reporting Signed-off-by: Loren Eteval --- Furious/Controllers/ConnectionController.py | 27 ++++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Furious/Controllers/ConnectionController.py b/Furious/Controllers/ConnectionController.py index bb1b576..b942158 100644 --- a/Furious/Controllers/ConnectionController.py +++ b/Furious/Controllers/ConnectionController.py @@ -176,6 +176,15 @@ class ConnectionController(QtCore.QObject): self._lastError = ConnectionError(_('Unable to connect'), message, details) self.errorOccurred.emit(self._lastError) + def _failConnection(self, message: str, details: str = '') -> bool: + """Clean partial runtime state, then publish one structured error.""" + if self.state is not ConnectionState.Disconnected: + self.startDisconnection() + + self._reportError(message, details) + + return False + def _reset(self): """Restore disconnected state after all runtime resources stop.""" self.progressFinished.emit(True) @@ -266,6 +275,8 @@ class ConnectionController(QtCore.QObject): # Retain application diagnostics while starting a fresh runtime log. logManager.clear(runtimeOnly=True) + startExceptionDetails = '' + try: success = self._coreManager.start( configuration, @@ -283,6 +294,7 @@ class ConnectionController(QtCore.QObject): logger.error(f'failed to start core manager: {ex}') success = False + startExceptionDetails = str(ex) self._setProcessesChanged() @@ -297,13 +309,12 @@ class ConnectionController(QtCore.QObject): startError = getattr(self._coreManager, 'lastStartError', '') - self.startDisconnection( + return self._failConnection( f'{configuration.coreName()}: ' - + (_(startError) if startError else _('Unknown error')) + + (_(startError) if startError else _('Unknown error')), + startExceptionDetails, ) - return False - settings = AppSettings.get('CustomProxyBypass') proxyServerBypass = ( @@ -322,12 +333,10 @@ class ConnectionController(QtCore.QObject): f'server bypass settings: {proxyServerBypass}' ) - self.startDisconnection( - f'{configuration.coreName()}: ' + _('Unknown error') + return self._failConnection( + f'{configuration.coreName()}: ' + _('Unknown error'), str(ex) ) - return False - self._finishConnecting() self.notificationRequested.emit( f'{configuration.coreName()}: ' + _('Connected') @@ -482,6 +491,6 @@ class ConnectionController(QtCore.QObject): else f'{core.name()}: ' + _('Core terminated unexpectedly') ) - putItem(functools.partial(self.startDisconnection, message)) + putItem(functools.partial(self._failConnection, message)) return None