37
37
UserData ,
38
38
WashTowelMode ,
39
39
)
40
- from .exceptions import RoborockException , RoborockTimeout , VacuumError
40
+ from .exceptions import (
41
+ RoborockAccountDoesNotExist ,
42
+ RoborockException ,
43
+ RoborockInvalidCode ,
44
+ RoborockInvalidEmail ,
45
+ RoborockTimeout ,
46
+ RoborockUrlException ,
47
+ VacuumError ,
48
+ )
41
49
from .roborock_future import RoborockFuture
42
50
from .roborock_message import RoborockMessage
43
51
from .typing import DeviceProp , DockSummary , RoborockCommand
@@ -345,12 +353,15 @@ async def _get_base_url(self) -> str:
345
353
params = {"email" : self ._username , "needtwostepauth" : "false" },
346
354
)
347
355
if response is None :
348
- raise RoborockException ("get url by email returned None" )
349
- if response .get ("code" ) != 200 :
350
- raise RoborockException (response .get ("error" ))
356
+ raise RoborockUrlException ("get url by email returned None" )
357
+ response_code = response .get ("code" )
358
+ if response_code != 200 :
359
+ if response_code == 2003 :
360
+ raise RoborockInvalidEmail ("Your email was incorrectly formatted." )
361
+ raise RoborockUrlException (response .get ("error" ))
351
362
response_data = response .get ("data" )
352
363
if response_data is None :
353
- raise RoborockException ("response does not have 'data'" )
364
+ raise RoborockUrlException ("response does not have 'data'" )
354
365
self .base_url = response_data .get ("url" )
355
366
return self .base_url
356
367
@@ -375,8 +386,12 @@ async def request_code(self) -> None:
375
386
)
376
387
if code_response is None :
377
388
raise RoborockException ("Failed to get a response from send email code" )
378
- if code_response .get ("code" ) != 200 :
379
- raise RoborockException (code_response .get ("msg" ))
389
+ response_code = code_response .get ("code" )
390
+ if response_code != 200 :
391
+ if response_code == 2008 :
392
+ raise RoborockAccountDoesNotExist ("Account does not exist - check your login and try again." )
393
+ else :
394
+ raise RoborockException (f"{ code_response .get ('msg' )} - response code: { code_response .get ('code' )} " )
380
395
381
396
async def pass_login (self , password : str ) -> UserData :
382
397
base_url = await self ._get_base_url ()
@@ -395,7 +410,7 @@ async def pass_login(self, password: str) -> UserData:
395
410
if login_response is None :
396
411
raise RoborockException ("Login response is none" )
397
412
if login_response .get ("code" ) != 200 :
398
- raise RoborockException (login_response .get (" msg" ) )
413
+ raise RoborockException (f" { login_response .get (' msg' ) } - response code: { login_response . get ( 'code' ) } " )
399
414
user_data = login_response .get ("data" )
400
415
if not isinstance (user_data , dict ):
401
416
raise RoborockException ("Got unexpected data type for user_data" )
@@ -417,8 +432,11 @@ async def code_login(self, code) -> UserData:
417
432
)
418
433
if login_response is None :
419
434
raise RoborockException ("Login request response is None" )
420
- if login_response .get ("code" ) != 200 :
421
- raise RoborockException (login_response .get ("msg" ))
435
+ response_code = login_response .get ("code" )
436
+ if response_code != 200 :
437
+ if response_code == 2018 :
438
+ raise RoborockInvalidCode ("Invalid code - check your code and try again." )
439
+ raise RoborockException (f"{ login_response .get ('msg' )} - response code: { response_code } " )
422
440
user_data = login_response .get ("data" )
423
441
if not isinstance (user_data , dict ):
424
442
raise RoborockException ("Got unexpected data type for user_data" )
@@ -439,7 +457,7 @@ async def get_home_data(self, user_data: UserData) -> HomeData:
439
457
if home_id_response is None :
440
458
raise RoborockException ("home_id_response is None" )
441
459
if home_id_response .get ("code" ) != 200 :
442
- raise RoborockException (home_id_response .get (" msg" ) )
460
+ raise RoborockException (f" { home_id_response .get (' msg' ) } - response code: { home_id_response . get ( 'code' ) } " )
443
461
444
462
home_id = home_id_response ["data" ].get ("rrHomeId" )
445
463
timestamp = math .floor (time .time ())
0 commit comments