
    i                         S r SSKJr  SSKJr  SSKrSSKrSSKJr  SSK	J
r
  SSKJr  SS	KJr  SS
KJr  SSKJrJr  SrSrSrSrSrSrSrSrSrSr\R<                  " \5      r  " S S\5      r!g)z-
Controller to interface with Home Assistant
    )Callable)partialN)Any   )APP_HOMEASSISTANT_LOVELACE)PyChromecastError)CastMessage)chain_on_success   )CallbackTypeBaseControllerzurn:x-cast:com.nabucasa.hast                     c                   f  ^  \ rS rSrSr\\\S.S\S\S\S-  S\S	\	/ S4   S
\S\S\
SS4U 4S jjjr\S\4S j5       rS!S jrS!S jrS\S\S\4S jrS\SS4S jrS\SS4S jrS!S jrSS.S\S-  SS4S jjr S"SS.S\\-  S-  S\S-  S\S-  SS4S jjjrS\\\4   S\S-  SS4S jrS rU =r$ )#HomeAssistantController$   z+Controller to interact with Home Assistant.)app_namespaceapp_idhass_connect_timeouthass_url	hass_uuid	client_idNrefresh_token
unregisterr   r   r   returnc                  > [         R                  S5        [        T	U ]  Xg5        Xl        X l        X0l        X@l        XPl        Xl	        S U l
        [        R                  " 5       U l        U R                  R                  5         / U l        g )Nz HomeAssistantController.__init__)_LOGGERdebugsuper__init__r   r   r   r   r   r   status	threadingEvent_hass_connecting_eventset_on_connect)
selfr   r   r   r   r   r   r   r   	__class__s
            ]/home/sebas/venvs/catt/lib/python3.13/site-packages/pychromecast/controllers/homeassistant.pyr%    HomeAssistantController.__init__'   sq     	89/ ""*$$8! $(&/oo&7###'')/1    c                     U R                   SL=(       aU    U R                   S   =(       a?    U R                   S   U R                  :H  =(       a    U R                   S   U R                  :H  $ )z&Return if connected to Home Assistant.N	connectedhassUrlhassUUID)r&   r   r   r,   s    r.   hass_connected&HomeAssistantController.hass_connectedG   s\     KKt# :K(:I&$--7: J'4>>9		
r0   c                 N    [         R                  S5        U R                  5         g)zVCalled when a channel has been openend that supports the
namespace of this controller.z)HomeAssistantController.channel_connectedN)r"   r#   
get_statusr5   s    r.   channel_connected)HomeAssistantController.channel_connectedQ   s     	ABr0   c                 p    [         R                  S5        SU l        U R                  R	                  5         g)z&Called when a channel is disconnected.z,HomeAssistantController.channel_disconnectedN)r"   r#   r&   r)   r*   r5   s    r.   channel_disconnected,HomeAssistantController.channel_disconnectedW   s(    DE##'')r0   _messagedatac                    UR                  S5      S:X  a  [        R                  SU5        US   U R                  :w  d  US   U R                  :w  a,  U R
                  R                  S5        U R                  5         gU R                  nX l	        U(       d  U R                  (       d  [        R                  S5        gU R                  R                  5         U R                  S5        gUR                  S5      S	:X  a[  [        R                  SU5        UR                  S
5      [        :X  a+  U R
                  R                  S5        U R                  5         gg)z"Called when a message is received.typereceiver_statusz*HomeAssistantController.receive_message %sr3   r4   z$Received status for another instanceTz9HomeAssistantController.receive_message already connectedreceiver_error
error_codezReceived ERR_WRONG_INSTANCEF)getr"   r#   r   r   loggerinfor   r6   r&   r)   r*   _call_on_connect_callbacksERR_WRONG_INSTANCE)r,   r?   r@   was_connecteds       r.   receive_message'HomeAssistantController.receive_message]   s   88F00MMFMI$--/4
3Ct~~3U  !GH! //MKD$7$7O  ''++-++D188F//MMFMxx%);;  !>?!r0   msg_sentc                     [         R                  SU5        U R                  (       a5  U R                  R                  5       " US5        U R                  (       a  M4  gg)zCall on connect callbacks.z5HomeAssistantController._call_on_connect_callbacks %sN)r"   r#   r+   pop)r,   rN   s     r.   rI   2HomeAssistantController._call_on_connect_callbacks}   sA    MxX  "8T2 r0   callback_functionc                    [         R                  S5        U R                  R                  U5        U R                  R                  5       (       d  [         R                  S5        gU R                  R                  5          U R                  SU R                  U R                  U R                  U R                  S.5        U R                  R                  U R                   5         U R                  R                  5       (       dA  U R"                  R%                  SU R                  5        U R                  S5        ['        5       e U R                  R                  5         g! [         aB    [         R                  S5        U R                  R                  5         U R                  S5        e f = f! U R                  R                  5         f = f)	z9Connect to Home Assistant and call the provided callback.z%HomeAssistantController._connect_hasszDHomeAssistantController._connect_hass _hass_connecting_event not setNconnect)rB   refreshTokenclientIdr3   r4   zDHomeAssistantController._connect_hass failed to send connect messageFz_connect_hass failed for %s)r"   r#   r+   appendr)   is_setclearsend_messager   r   r   r   	Exceptionr*   rI   waitr   rG   warningr   r,   rR   s     r.   _connect_hass%HomeAssistantController._connect_hass   sq   => 12**1133MMV ##))+	%$($6$6 $#}} $" 	##(()B)BC	...5577##$A4==Q//6')) 8
 ''++-  	MMV ''++-++E2	 ''++-s   ?E" &A F1 "AF.1Gc                 *    U R                  SS05        g)zShow the demo.rB   	show_demoN)rZ   r5   s    r.   rb   !HomeAssistantController.show_demo   s    6;/0r0   rR   c                ~    [         R                  S5        U R                  SU R                  U R                  S.US9  g)z"Get status of Home Assistant Cast.z"HomeAssistantController.get_statusr9   )rB   r3   r4   rd   Nr"   r#   _send_connected_messager   r   r^   s     r.   r9   "HomeAssistantController.get_status   s=    :;$$$== NN
 0 	% 	
r0   	view_pathurl_pathc                    [         R                  S5        U R                  SU R                  U R                  UUS.US9  g)zShow a Lovelace UI.z*HomeAssistantController.show_lovelace_viewshow_lovelace_view)rB   r3   r4   viewPathurlPathrd   Nrf   )r,   ri   rj   rR   s       r.   rl   *HomeAssistantController.show_lovelace_view   sE     	BC$$,== NN%# 0 	% 		
r0   c                 $   [         R                  SU5        U R                  (       a%  [         R                  S5        U R                  XS9  g[         R                  S5        U R	                  [        [        U R                  U5      U5      5        g)z1Send a message to a connected Home Assistant Castz2HomeAssistantController._send_connected_message %szAHomeAssistantController._send_connected_message already connectedrd   NzAHomeAssistantController._send_connected_message not yet connected)r"   r#   r6   send_message_nocheckr_   r
   r   )r,   r@   rR   s      r.   rg   /HomeAssistantController._send_connected_message   s{     	JDQMMS %%d%PO	
 	1148:K	
r0   )	r)   r+   r   r   r   r   r   r&   r   )r    N)N)__name__
__module____qualname____firstlineno____doc__APP_NAMESPACEr   DEFAULT_HASS_CONNECT_TIMEOUTstrr   floatr%   propertyboolr6   r:   r=   r	   dictrL   rI   r   r_   rb   r9   intrl   r   rg   __static_attributes____classcell__)r-   s   @r.   r   r   $   s   5 +0&B2 2 	2
 :2 2 RX&2 2 2 $2 
2 2@ 
 
 
* 4 D @34 3D 3%.| %. %.N1 FJ 

|d/B 

d 

  $

 26
9t#
 *

 ($.
 

(
cN
7Cd7J
	
 
r0   r   )"rw   collections.abcr   	functoolsr   loggingr'   typingr   configr   errorr   generated.cast_channel_pb2r	   response_handlerr
    r   r   rx   ry   ERR_CONNECTION_FAILEDERR_AUTHENTICATION_FAILEDERR_CONNECTION_LOSTERR_HASS_URL_MISSINGERR_NO_HTTPSrJ   ERR_NOT_CONNECTEDERR_FETCH_CONFIG_FAILED	getLoggerrs   r"   r    r0   r.   <module>r      s    %     / % 0 * /!         


H
%}
n }
r0   