11from __future__ import annotations
22
3- import asyncio
43import base64
54import logging
65import threading
76import uuid
8- from asyncio import Lock , Task
7+ from asyncio import Lock
98from typing import Any
109from urllib .parse import urlparse
1110
@@ -62,7 +61,7 @@ def on_connect(self, *args, **kwargs):
6261 message = f"Failed to connect ({ mqtt .error_string (rc )} )"
6362 self ._logger .error (message )
6463 if connection_queue :
65- connection_queue .resolve (( None , VacuumError (message ) ))
64+ connection_queue .set_exception ( VacuumError (message ))
6665 return
6766 self ._logger .info (f"Connected to mqtt { self ._mqtt_host } :{ self ._mqtt_port } " )
6867 topic = f"rr/m/o/{ self ._mqtt_user } /{ self ._hashed_user } /{ self .device_info .device .duid } "
@@ -71,11 +70,11 @@ def on_connect(self, *args, **kwargs):
7170 message = f"Failed to subscribe ({ mqtt .error_string (rc )} )"
7271 self ._logger .error (message )
7372 if connection_queue :
74- connection_queue .resolve (( None , VacuumError (message ) ))
73+ connection_queue .set_exception ( VacuumError (message ))
7574 return
7675 self ._logger .info (f"Subscribed to topic { topic } " )
7776 if connection_queue :
78- connection_queue .resolve (( True , None ) )
77+ connection_queue .set_result ( True )
7978
8079 def on_message (self , * args , ** kwargs ):
8180 client , __ , msg = args
@@ -94,7 +93,7 @@ def on_disconnect(self, *args, **kwargs):
9493 self .update_client_id ()
9594 connection_queue = self ._waiting_queue .get (DISCONNECT_REQUEST_ID )
9695 if connection_queue :
97- connection_queue .resolve (( True , None ) )
96+ connection_queue .set_result ( True )
9897 except Exception as ex :
9998 self ._logger .exception (ex )
10099
@@ -112,53 +111,53 @@ def sync_start_loop(self) -> None:
112111 self ._logger .info ("Starting mqtt loop" )
113112 super ().loop_start ()
114113
115- def sync_disconnect (self ) -> tuple [ bool , Task [ tuple [ Any , VacuumError | None ]] | None ] :
114+ def sync_disconnect (self ) -> Any :
116115 if not self .is_connected ():
117- return False , None
116+ return None
118117
119118 self ._logger .info ("Disconnecting from mqtt" )
120- disconnected_future = asyncio . ensure_future ( self ._async_response (DISCONNECT_REQUEST_ID ) )
119+ disconnected_future = self ._async_response (DISCONNECT_REQUEST_ID )
121120 rc = super ().disconnect ()
122121
123122 if rc == mqtt .MQTT_ERR_NO_CONN :
124123 disconnected_future .cancel ()
125- return False , None
124+ return None
126125
127126 if rc != mqtt .MQTT_ERR_SUCCESS :
128127 disconnected_future .cancel ()
129128 raise RoborockException (f"Failed to disconnect ({ mqtt .error_string (rc )} )" )
130129
131- return True , disconnected_future
130+ return disconnected_future
132131
133- def sync_connect (self ) -> tuple [ bool , Task [ tuple [ Any , VacuumError | None ]] | None ] :
132+ def sync_connect (self ) -> Any :
134133 if self .is_connected ():
135134 self .sync_start_loop ()
136- return False , None
135+ return None
137136
138137 if self ._mqtt_port is None or self ._mqtt_host is None :
139138 raise RoborockException ("Mqtt information was not entered. Cannot connect." )
140139
141140 self ._logger .debug ("Connecting to mqtt" )
142- connected_future = asyncio . ensure_future ( self ._async_response (CONNECT_REQUEST_ID ) )
141+ connected_future = self ._async_response (CONNECT_REQUEST_ID )
143142 super ().connect (host = self ._mqtt_host , port = self ._mqtt_port , keepalive = KEEPALIVE )
144143
145144 self .sync_start_loop ()
146- return True , connected_future
145+ return connected_future
147146
148147 async def async_disconnect (self ) -> None :
149148 async with self ._mutex :
150- ( disconnecting , disconnected_future ) = self .sync_disconnect ()
151- if disconnecting and disconnected_future :
152- ( _ , err ) = await disconnected_future
153- if err :
149+ if disconnected_future : = self .sync_disconnect ():
150+ try :
151+ await disconnected_future
152+ except VacuumError as err :
154153 raise RoborockException (err ) from err
155154
156155 async def async_connect (self ) -> None :
157156 async with self ._mutex :
158- ( connecting , connected_future ) = self .sync_connect ()
159- if connecting and connected_future :
160- ( _ , err ) = await connected_future
161- if err :
157+ if connected_future : = self .sync_connect ():
158+ try :
159+ await connected_future
160+ except VacuumError as err :
162161 raise RoborockException (err ) from err
163162
164163 def _send_msg_raw (self , msg : bytes ) -> None :
0 commit comments