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.thermostat = Thermostat(
|
||||||
self, self.report_refresh_spin.value()
|
self, self.report_refresh_spin.value()
|
||||||
)
|
)
|
||||||
|
self._connecting_task = None
|
||||||
|
|
||||||
def handle_connection_error():
|
def handle_connection_error():
|
||||||
self.info_box.display_info_box(
|
self.info_box.display_info_box(
|
||||||
@ -245,34 +246,31 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
self.conn_menu.port_set_spin.value(),
|
self.conn_menu.port_set_spin.value(),
|
||||||
)
|
)
|
||||||
|
|
||||||
self._connecting_task = None
|
if (self._connecting_task is None) and (not self.thermostat.connected()):
|
||||||
try:
|
|
||||||
if (self._connecting_task is None) or (not self.thermostat.connected()):
|
|
||||||
self.status_lbl.setText("Connecting...")
|
self.status_lbl.setText("Connecting...")
|
||||||
self.connect_btn.setText("Stop")
|
self.connect_btn.setText("Stop")
|
||||||
self.conn_menu.host_set_line.setEnabled(False)
|
self.conn_menu.host_set_line.setEnabled(False)
|
||||||
self.conn_menu.port_set_spin.setEnabled(False)
|
self.conn_menu.port_set_spin.setEnabled(False)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._connecting_task = asyncio.wait_for(
|
self._connecting_task = asyncio.create_task(
|
||||||
self.thermostat.start_session(host=host, port=port), timeout=5
|
asyncio.wait_for(self.thermostat.start_session(host=host, port=port), timeout=5)
|
||||||
)
|
)
|
||||||
await self._connecting_task
|
await self._connecting_task
|
||||||
except asyncio.TimeoutError:
|
except (OSError, asyncio.TimeoutError):
|
||||||
|
await self.bail()
|
||||||
return
|
return
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
return
|
||||||
|
finally:
|
||||||
|
self._connecting_task = None
|
||||||
|
|
||||||
await self._on_connection_changed(True)
|
await self._on_connection_changed(True)
|
||||||
else:
|
else:
|
||||||
if self._connecting_task is not None:
|
if self._connecting_task is not None:
|
||||||
self._connecting_task.cancel()
|
self._connecting_task.cancel()
|
||||||
await self.bail()
|
await self.bail()
|
||||||
|
|
||||||
# TODO: Remove asyncio.TimeoutError in Python 3.11
|
|
||||||
except (OSError, asyncio.TimeoutError):
|
|
||||||
try:
|
|
||||||
await self.bail()
|
|
||||||
except ConnectionResetError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@asyncSlot()
|
@asyncSlot()
|
||||||
async def bail(self):
|
async def bail(self):
|
||||||
await self._on_connection_changed(False)
|
await self._on_connection_changed(False)
|
||||||
|
Loading…
Reference in New Issue
Block a user