
    |~gw                         d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlmZmZ erd dlmZ  G d de      Z G d d      Zy)	    N)DictTupleCallableSetOptionalAny
CollectionMappingUnionoverloadTYPE_CHECKING)GioGLib)Literalc                   L    e Zd ZdZdeddfdZedefd       Zedefd       Zy)	DbusErrorzorg.blueman.ErrormessagereturnNc                     || _         y N_message)selfr   s     :/usr/lib/python3/dist-packages/blueman/main/DbusService.py__init__zDbusError.__init__   s	        c                     | j                   S r   )_namer   s    r   namezDbusError.name   s    zzr   c                     | j                   S r   r   r   s    r   r   zDbusError.message   s    }}r   )	__name__
__module____qualname__r   strr   propertyr    r    r   r   r   r      sP    E      c     r   r   c                      e Zd Z	 d,dee   dededej                  deeeef      ddfdZe		 d-d	ed
e
edf   deee
edf   f   ded   dededdfd       Ze		 	 d-d	ed
e
edf   de
edf   dedef   deddddfd       Z	 d-d	ed
e
edf   deee
edf   f   dedef   dededdfdZd	eddfdZd	edeee
edf   f   ddfdZdeee
edf   f   de
edf   fdZd	eddfdZd	ededdfdZd.dZd.dZd.dZdej0                  d ed!eded"ed#ej4                  d$ej6                  ddfd%Zdej0                  d&ededed'edej4                  fd(Zed$ej6                  d)eddfd*       Z ede
edf   de!e   deej4                     fd+       Z"y)/DbusServiceNbus_nameinterface_namepathbus_type
propertiesr   c                     t        j                  |      | _        |r2t        j                  ||t         j                  j
                  d d d        i | _        i | _        |i n|| _        || _	        || _
        d | _        y r   )r   bus_get_sync_busbus_own_nameBusNameOwnerFlagsNONE_methods_signals_properties_interface_name_path_regid)r   r*   r+   r,   r-   r.   s         r   r   zDbusService.__init__   sp    $$X.	Xx1F1F1K1KTSWY]^km46!+!32-
%)r   r    	arguments.return_valuesmethod).Npass_senderis_asyncc                      y r   r'   r   r    r;   r<   r=   r>   r?   s          r   
add_methodzDbusService.add_method(   s     	r   zLiteral[False]c                      y r   r'   rA   s          r   rB   zDbusService.add_method-   s     	r   c                     || j                   v rt        | d      t               }|r|j                  d       |r|j                  d       || j	                  |      ||f| j
                  |<   | j                          y )N already definedsenderasync)r6   	Exceptionsetadd_handle_return_typer5   _reregister)r   r    r;   r<   r=   r>   r?   optionss           r   rB   zDbusService.add_method3   sv    4== tf$4566%KK!KK ($*B*B=*QSY[bcdr   c                 >    | j                   |= | j                          y r   )r5   rL   r   r    s     r   remove_methodzDbusService.remove_method@       MM$r   typesc                     || j                   v rt        | d      | j                  |      | j                   |<   | j                          y )NrE   )r6   rH   rK   rL   )r   r    rR   s      r   
add_signalzDbusService.add_signalD   sF    4== tf$4566"66u=dr   c                 2    t        |t              r|r|fS y|S )Nr'   )
isinstancer%   )r   rR   s     r   rK   zDbusService._handle_return_typeK   s     eS!v Lr   c                 >    | j                   |= | j                          y r   )r6   rL   rO   s     r   remove_signalzDbusService.remove_signalV   rQ   r   argsc           
          | j                   j                  d | j                  | j                  || j	                  | j
                  |   |             y r   )r1   emit_signalr9   r8   _prepare_argumentsr6   )r   r    rY   s      r   r[   zDbusService.emit_signalZ   s@    		dDJJ0D0Dd"55dmmD6I4P	Rr   c                    d| j                    d}| j                  j                         D ]  \  }}|d| d| dz  } | j                  j                         D ]9  \  }}|d| dz  }|d   D ]  }|d| d	z  } |d
   D ]  }|d| dz  } |dz  }; | j                  j                         D ]#  \  }}	|d| dz  }|	D ]  }|d| dz  } |dz  }% |dz  }t
        j                  j                  |      }
| j                  j                  | j                  |
j                  d   | j                  | j                  d       }|r|| _        y t        j                   d| j                         )Nz <node name='/'><interface name='z'>z<property name='z' type='z' access='read'/>z<method name='r   z<arg type='z' direction='in'/>   z' direction='out'/>z	</method>z<signal name='z'/>z	</signal>z</interface></node>z%Failed to register object with path: )r8   r7   itemsr5   r6   r   DBusNodeInfonew_for_xmlr1   register_objectr9   
interfaces_handle_method_call_get_propertyr:   r   Error)r   node_xmlproperty_name	signaturemethod_namemethod_infoargumentresultsignal_namesignal_signature	node_inforegids               r   registerzDbusService.register^   s   5d6J6J5K2N(,(8(8(>(>(@ 	_$M9*=/)L]^^H	_(,(;(;(= 	$$K.R88H'N Gk(3EFFG%a. Fk&1DEEF#H	$ .2]]-@-@-B 	$)K).R88H- 9	k)C889#H		$
 	))$$00:			))JJ  #$$ DK**DTZZLQRRr   c                 v    | j                   -| j                  j                  | j                          d | _         y y r   )r:   r1   unregister_objectr   s    r   
unregisterzDbusService.unregister~   s.    ;;"II''4DK #r   c                 ^    | j                   r!| j                          | j                          y y r   )r:   ru   rr   r   s    r   rL   zDbusService._reregister   s!    ;;OOMMO r   _connectionrF   r9   rj   
parameters
invocationc           	          	 	  j                   |   \  }}	}
dt        dd f fd}|j                         }d
v r||fz  }d|
v r 	|| fd	fz     y  | 	|        y # t        $ r^ t        j                  d|        j	                  t        j                         t
        j                  j                  d| d|        Y w xY w# t        $ r} j                  |       Y d }~y d }~ww xY w)
NzUnhandled method: zNo such method on interface: .rm   r   c                      j                  j                  t              dkD  r| d                y |              y )Nr^   r   )return_valuer\   len)rm   ry   result_signaturesr   s    r   okz+DbusService._handle_method_call.<locals>.ok   sG    ''(?(?@QMPQbMcfgMgq	)u vms)u vr   rF   rG   c                 (    j                  |       S r   )_return_dbus_error)	exceptionry   r   s    r   <lambda>z1DbusService._handle_method_call.<locals>.<lambda>   s    t7N7Nz[d7e r   )r5   KeyErrorloggingwarningreturn_error_literalr   dbus_error_quark	DBusErrorUNKNOWN_METHODr   unpackrH   r   )r   rw   rF   r9   r+   rj   rx   ry   
_argumentsr=   rM   r   rY   er   s   `      `      @r   rd   zDbusService._handle_method_call   s   	3pAE{A[>
-vwvC vD v $$&D7"	!'!%e ffh64=!  p"4[M BC//0D0D0FHdHd2OP^O__`al`m0npp   	3##J22	3s;   A# <C C #A$C
C 	C

C 	C2C--C2_senderrh   c                     || j                   k(  r|| j                  k(  sJ t        j                  | j                  |   t        | |            S r   )r8   r9   r   Variantr7   getattr)r   rw   r   r,   r+   rh   s         r   re   zDbusService._get_property   sD    !5!55$$**:LLL||D,,];WT==YZZr   datac                    t        |t              r'| j                  |j                  |j                         y t        |t
              rst        j                         \  }}}||u r'dj                  t        j                  |||            }n;dj                  t        j                  |j                  |            }nt        |      }| j                  t        j                          t        j"                  j$                  |       y )N )rV   r   return_dbus_errorr    r   rH   sysexc_infojoin	tracebackformat_exceptionformat_exception_only	__class__r%   r   r   r   r   FAILED)ry   r   etevetbr   s         r   r   zDbusService._return_dbus_error   s    dI&((DLLA$	*!llnB: ggi&@&@R&MNG ggi&E&EdnnVZ&[\Gd)++C,@,@,BCMMDXDXZabr   c                 \    | r)t        j                  ddj                  |        d|      S d S )N(r   ))r   r   r   )rR   rY   s     r   r\   zDbusService._prepare_arguments   s,    <At||a/q148KtKr   r   )FF)r   N)#r"   r#   r$   r   r%   r   BusTyper
   r   r   r   r   r   boolrB   r   rP   rT   rK   rX   r[   rr   ru   rL   DBusConnectionr   r   DBusMethodInvocationrd   re   staticmethodobjectr   r	   r\   r'   r   r   r)   r)      sV   ;?
*# 
* 
*3 
*Z]ZeZe 
*%gc3h&78
*DH
* \as uS#X uUXZ_`ceh`hZiUiOj #I.=AUYfj  CH05s uS#X uUXZ]U] #CH-<@-:>  \as uS#X uUXZ_`ceh`hZiUiOj #CH-<@TXei# $ s 5eCHo1E+F 4 	sE#s(O/C)D 	sTWx 	# $ R RC RD RS@

3s/A/A 33 3WZ 3lo 3),3:>,,3TWTlTl3qu30[);); [c [QT [fi [%([-1\\[
 cs'?'? cv cRV c c L%S/ LC LXVZVbVbMc L Lr   r)   )r   r   r   typingr   r   r   r   r   r   r	   r
   r   r   r   gi.repositoryr   r   typing_extensionsr   rH   r   r)   r'   r   r   <module>r      s=     
  q q q q #)	 [L [Lr   