11from __future__ import annotations
22
3- import asyncio
43import base64
54import logging
65import threading
76import typing
87import uuid
9- from asyncio import Lock , Task
8+ from asyncio import Lock
109from typing import Any
1110from urllib .parse import urlparse
1211
@@ -65,7 +64,7 @@ def on_connect(self, *args, **kwargs):
6564 message = f"Failed to connect ({ mqtt .error_string (rc )} )"
6665 self ._logger .error (message )
6766 if connection_queue :
68- connection_queue .resolve (( None , VacuumError (message ) ))
67+ connection_queue .set_exception ( VacuumError (message ))
6968 return
7069 self ._logger .info (f"Connected to mqtt { self ._mqtt_host } :{ self ._mqtt_port } " )
7170 topic = f"rr/m/o/{ self ._mqtt_user } /{ self ._hashed_user } /{ self .device_info .device .duid } "
@@ -74,11 +73,11 @@ def on_connect(self, *args, **kwargs):
7473 message = f"Failed to subscribe ({ mqtt .error_string (rc )} )"
7574 self ._logger .error (message )
7675 if connection_queue :
77- connection_queue .resolve (( None , VacuumError (message ) ))
76+ connection_queue .set_exception ( VacuumError (message ))
7877 return
7978 self ._logger .info (f"Subscribed to topic { topic } " )
8079 if connection_queue :
81- connection_queue .resolve (( True , None ) )
80+ connection_queue .set_result ( True )
8281
8382 def on_message (self , * args , ** kwargs ):
8483 client , __ , msg = args
@@ -97,7 +96,7 @@ def on_disconnect(self, *args, **kwargs):
9796 self .update_client_id ()
9897 connection_queue = self ._waiting_queue .get (DISCONNECT_REQUEST_ID )
9998 if connection_queue :
100- connection_queue .resolve (( True , None ) )
99+ connection_queue .set_result ( True )
101100 except Exception as ex :
102101 self ._logger .exception (ex )
103102
@@ -115,53 +114,53 @@ def sync_start_loop(self) -> None:
115114 self ._logger .info ("Starting mqtt loop" )
116115 super ().loop_start ()
117116
118- def sync_disconnect (self ) -> tuple [ bool , Task [ tuple [ Any , VacuumError | None ]] | None ] :
117+ def sync_disconnect (self ) -> Any :
119118 if not self .is_connected ():
120- return False , None
119+ return None
121120
122121 self ._logger .info ("Disconnecting from mqtt" )
123- disconnected_future = asyncio . ensure_future ( self ._async_response (DISCONNECT_REQUEST_ID ) )
122+ disconnected_future = self ._async_response (DISCONNECT_REQUEST_ID )
124123 rc = super ().disconnect ()
125124
126125 if rc == mqtt .MQTT_ERR_NO_CONN :
127126 disconnected_future .cancel ()
128- return False , None
127+ return None
129128
130129 if rc != mqtt .MQTT_ERR_SUCCESS :
131130 disconnected_future .cancel ()
132131 raise RoborockException (f"Failed to disconnect ({ mqtt .error_string (rc )} )" )
133132
134- return True , disconnected_future
133+ return disconnected_future
135134
136- def sync_connect (self ) -> tuple [ bool , Task [ tuple [ Any , VacuumError | None ]] | None ] :
135+ def sync_connect (self ) -> Any :
137136 if self .is_connected ():
138137 self .sync_start_loop ()
139- return False , None
138+ return None
140139
141140 if self ._mqtt_port is None or self ._mqtt_host is None :
142141 raise RoborockException ("Mqtt information was not entered. Cannot connect." )
143142
144143 self ._logger .debug ("Connecting to mqtt" )
145- connected_future = asyncio . ensure_future ( self ._async_response (CONNECT_REQUEST_ID ) )
144+ connected_future = self ._async_response (CONNECT_REQUEST_ID )
146145 super ().connect (host = self ._mqtt_host , port = self ._mqtt_port , keepalive = KEEPALIVE )
147146
148147 self .sync_start_loop ()
149- return True , connected_future
148+ return connected_future
150149
151150 async def async_disconnect (self ) -> None :
152151 async with self ._mutex :
153- ( disconnecting , disconnected_future ) = self .sync_disconnect ()
154- if disconnecting and disconnected_future :
155- ( _ , err ) = await disconnected_future
156- if err :
152+ if disconnected_future : = self .sync_disconnect ():
153+ try :
154+ await disconnected_future
155+ except VacuumError as err :
157156 raise RoborockException (err ) from err
158157
159158 async def async_connect (self ) -> None :
160159 async with self ._mutex :
161- ( connecting , connected_future ) = self .sync_connect ()
162- if connecting and connected_future :
163- ( _ , err ) = await connected_future
164- if err :
160+ if connected_future : = self .sync_connect ():
161+ try :
162+ await connected_future
163+ except VacuumError as err :
165164 raise RoborockException (err ) from err
166165
167166 def _send_msg_raw (self , msg : bytes ) -> None :
0 commit comments