@@ -54,7 +54,7 @@ async def _get_base_url(self) -> str:
5454 raise RoborockMissingParameters (
5555 "You are missing parameters for this request, are you sure you " "entered your username?"
5656 )
57- raise RoborockUrlException (response .get (" error" ) )
57+ raise RoborockUrlException (f"error code: { response_code } msg: { response .get (' error' ) } " )
5858 response_data = response .get ("data" )
5959 if response_data is None :
6060 raise RoborockUrlException ("response does not have 'data'" )
@@ -276,7 +276,7 @@ async def get_products(self, user_data: UserData) -> ProductResponse:
276276 product_request = PreparedRequest (base_url , {"header_clientid" : header_clientid })
277277 product_response = await product_request .request (
278278 "get" ,
279- "/api/v3 /product" ,
279+ "/api/v4 /product" ,
280280 headers = {"Authorization" : user_data .token },
281281 )
282282 if product_response is None :
@@ -288,24 +288,44 @@ async def get_products(self, user_data: UserData) -> ProductResponse:
288288 return ProductResponse .from_dict (result )
289289 raise RoborockException ("product result was an unexpected type" )
290290
291+ async def download_code (self , user_data : UserData , product_id : int ):
292+ base_url = await self ._get_base_url ()
293+ header_clientid = self ._get_header_client_id ()
294+ product_request = PreparedRequest (base_url , {"header_clientid" : header_clientid })
295+ request = {"apilevel" : 99999 , "productids" : [product_id ], "type" : 2 }
296+ response = await product_request .request (
297+ "post" ,
298+ "/api/v1/appplugin" ,
299+ json = request ,
300+ headers = {"Authorization" : user_data .token , "Content-Type" : "application/json" },
301+ )
302+ return response ["data" ][0 ]["url" ]
303+
304+ async def download_category_code (self , user_data : UserData ):
305+ base_url = await self ._get_base_url ()
306+ header_clientid = self ._get_header_client_id ()
307+ product_request = PreparedRequest (base_url , {"header_clientid" : header_clientid })
308+ response = await product_request .request (
309+ "get" ,
310+ "api/v1/plugins?apiLevel=99999&type=2" ,
311+ headers = {
312+ "Authorization" : user_data .token ,
313+ },
314+ )
315+ return {r ["category" ]: r ["url" ] for r in response ["data" ]["categoryPluginList" ]}
316+
291317
292318class PreparedRequest :
293319 def __init__ (self , base_url : str , base_headers : dict | None = None ) -> None :
294320 self .base_url = base_url
295321 self .base_headers = base_headers or {}
296322
297- async def request (self , method : str , url : str , params = None , data = None , headers = None ) -> dict :
323+ async def request (self , method : str , url : str , params = None , data = None , headers = None , json = None ) -> dict :
298324 _url = "/" .join (s .strip ("/" ) for s in [self .base_url , url ])
299325 _headers = {** self .base_headers , ** (headers or {})}
300326 async with aiohttp .ClientSession () as session :
301327 try :
302- async with session .request (
303- method ,
304- _url ,
305- params = params ,
306- data = data ,
307- headers = _headers ,
308- ) as resp :
328+ async with session .request (method , _url , params = params , data = data , headers = _headers , json = json ) as resp :
309329 return await resp .json ()
310330 except ContentTypeError as err :
311331 """If we get an error, lets log everything for debugging."""
0 commit comments