forked from M-Labs/thermostat
Fix?
This commit is contained in:
parent
022e6b9bda
commit
1f90a2e9fe
@ -65,6 +65,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.thermostat = Thermostat(
|
||||
self, self.report_refresh_spin.value()
|
||||
)
|
||||
self._connecting_task = None
|
||||
|
||||
def handle_connection_error():
|
||||
self.info_box.display_info_box(
|
||||
@ -245,33 +246,30 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.conn_menu.port_set_spin.value(),
|
||||
)
|
||||
|
||||
self._connecting_task = None
|
||||
try:
|
||||
if (self._connecting_task is None) or (not self.thermostat.connected()):
|
||||
self.status_lbl.setText("Connecting...")
|
||||
self.connect_btn.setText("Stop")
|
||||
self.conn_menu.host_set_line.setEnabled(False)
|
||||
self.conn_menu.port_set_spin.setEnabled(False)
|
||||
if (self._connecting_task is None) and (not self.thermostat.connected()):
|
||||
self.status_lbl.setText("Connecting...")
|
||||
self.connect_btn.setText("Stop")
|
||||
self.conn_menu.host_set_line.setEnabled(False)
|
||||
self.conn_menu.port_set_spin.setEnabled(False)
|
||||
|
||||
try:
|
||||
self._connecting_task = asyncio.wait_for(
|
||||
self.thermostat.start_session(host=host, port=port), timeout=5
|
||||
)
|
||||
await self._connecting_task
|
||||
except asyncio.TimeoutError:
|
||||
return
|
||||
await self._on_connection_changed(True)
|
||||
else:
|
||||
if self._connecting_task is not None:
|
||||
self._connecting_task.cancel()
|
||||
await self.bail()
|
||||
|
||||
# TODO: Remove asyncio.TimeoutError in Python 3.11
|
||||
except (OSError, asyncio.TimeoutError):
|
||||
try:
|
||||
self._connecting_task = asyncio.create_task(
|
||||
asyncio.wait_for(self.thermostat.start_session(host=host, port=port), timeout=5)
|
||||
)
|
||||
await self._connecting_task
|
||||
except (OSError, asyncio.TimeoutError):
|
||||
await self.bail()
|
||||
except ConnectionResetError:
|
||||
pass
|
||||
return
|
||||
except asyncio.CancelledError:
|
||||
return
|
||||
finally:
|
||||
self._connecting_task = None
|
||||
|
||||
await self._on_connection_changed(True)
|
||||
else:
|
||||
if self._connecting_task is not None:
|
||||
self._connecting_task.cancel()
|
||||
await self.bail()
|
||||
|
||||
@asyncSlot()
|
||||
async def bail(self):
|
||||
|
Loading…
Reference in New Issue
Block a user