
    |~g+                     H   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZ d d
lmZ d dlmZmZ d dl m!Z! d dl"Z" e"jF                  dd       d dl m$Z$ erd dl%m&Z&  G d de      Z' G d de      Z( G d de      Z)y)    N)gettext)escape)ElementTree)	DictOptionaloverloadCallableUnionTYPE_CHECKINGTupleAnyList)Device)AgentManager)ServiceUUID)Notification_NotificationBubble_NotificationDialog)Builder)DbusService	DbusError)GioGtkz3.0)r   )Literalc                       e Zd ZdZy)BluezErrorCanceledzorg.bluez.Error.CanceledN__name__
__module____qualname___name     @/usr/lib/python3/dist-packages/blueman/main/applet/BluezAgent.pyr   r          &Er#   r   c                       e Zd ZdZy)BluezErrorRejectedzorg.bluez.Error.RejectedNr   r"   r#   r$   r'   r'      r%   r#   r'   c                       e Zd ZdZd' fdZd'dZd'dZdeded	ede	e
j                  e
j                  f   fd
ZdedefdZeded	ddedeegdf   deeeef   gdf   ddfd       Zeded	ddedeegdf   deeeef   gdf   ddfd       Zded	ededeegdf   deeeef   gdf   ddfdZdededededdf
dZd'dZd'dZd'dZdedeegdf   deeeef   gdf   ddfdZdedeegdf   deeeef   gdf   ddfdZdedededdfd Zded!eddfd"Zdede e   deg df   deegdf   ddf
d#Z!dedeg df   deegdf   ddfd$Z"ded%edeg df   deegdf   ddf
d&Z# xZ$S )(
BluezAgentz/org/bluez/agent/bluemanreturnNc                    t         |   d d| j                  t        j                  j
                         | j                  ddd| j                         | j                  ddd| j                  d	       | j                  d
dd| j                         | j                  ddd| j                  d	       | j                  ddd| j                         | j                  ddd| j                  d	       | j                  ddd| j                  d	       | j                  ddd| j                  d	       | j                  ddd| j                         d | _        d | _        i | _        d | _        g | _        y )Nzorg.bluez.Agent1Releaser"    RequestPinCode)osT)is_asyncDisplayPinCode)r/   r0   RequestPasskeyuDisplayPasskey)r/   r4   qRequestConfirmation)r/   r4   RequestAuthorizationAuthorizeServiceCancel)super__init___BluezAgent__agent_pathr   BusTypeSYSTEM
add_method_on_release_on_request_pin_code_on_display_pin_code_on_request_passkey_on_display_passkey_on_request_confirmation_on_request_authorization_on_authorize_service
_on_canceldialog_db_devhandlerids_notification_service_notifications)self	__class__s    r$   r<   zBluezAgent.__init__$   sC   143D3DckkFXFXY	2r4+;+;<(&#t7P7P[_`(*b$:S:ST(&#t7O7OZ^_(/2t?W?WX-z2t?\?\gkl.D<Z<Zeij*JD<V<Vaef"b$//:,06:.0X\]_#r#   c                     t        j                  d       | j                          t               j	                  | j
                  dd       y )NzRegister AgentKeyboardDisplayT)default)logginginforegisterr   register_agentr=   rO   s    r$   rW   zBluezAgent.register_agent7   s7    %&%%d&7&79JTX%Yr#   c                     t        j                  d       | j                          t               j	                  | j
                         y )NzUnregister Agent)rT   rU   
unregisterr   unregister_agentr=   rX   s    r$   r[   zBluezAgent.unregister_agent<   s/    '(''(9(9:r#   device_alias
dialog_msg
is_numericc           
        
 dt         j                  dt        dt        dt        dd f
d}t	        d      }|j                  dt         j                        }d	|j                  _        |j                  d
t         j                        }|j                  |       |j                  dt         j                        }|j                  |       |j                  dt         j                        |j                  dt         j                        }	|rEj                  d       j                  d       j                  d|       |	j!                          n3j                  d       j                  d       j#                  d       |	j                  dfd       |j                  dt         j$                        
j                  d
fd       |fS )Neditablenew_text_new_text_length	_positionr*   c                 H    |j                         s| j                  d       y y )Ninsert-text)isdigitstop_emission)r`   ra   rb   rc   s       r$   on_insert_textz7BluezAgent.build_passkey_dialog.<locals>.on_insert_textC   s!    ##%&&}5 &r#   zapplet-passkey.uirJ   bluemandevice_namemessage	pin_entryshow_input_check   re      Ftoggledc                 N    j                  | j                  j                        S N)set_visibilitypropsactive)xrl   s    r$   <lambda>z1BluezAgent.build_passkey_dialog.<locals>.<lambda>[   s    	0H0H0X r#   acceptchangedc                 H    j                  | j                         dk7        S )Nr-   )set_sensitiveget_text)rv   accept_buttons    r$   rw   z1BluezAgent.build_passkey_dialog.<locals>.<lambda>]   s    }/J/J1::<[]K]/^ r#   )r   Entrystrintr   
get_widgetDialogrt   	icon_nameLabel
set_markupset_textCheckButtonset_max_lengthset_width_charsconnecthiders   Button)rO   r\   r]   r^   rh   builderrJ   dev_namemsg
show_inputr}   rl   s             @@r$   build_passkey_dialogzBluezAgent.build_passkey_dialogA   sz   	6SYY 	6# 	6QT 	6ad 	6im 	6 -.##Hcjj9!*%%mSYY?L)  CII6Z &&{CII>	''(:COOL
$$Q'%%a(m^<OO$$R(%%b)$$U+9&XY**8SZZ@)%^_y  r#   object_pathc                 X    t        |      }dt        |j                         d|d    dS )Nobj_path<b>z</b> (Address))r   r   display_name)rO   r   devices      r$   get_device_stringzBluezAgent.get_device_stringa   s3    -VF//01y8I7J!LLr#   zLiteral[True]okerrc                      y rr   r"   rO   r]   r^   r   r   r   s         r$   ask_passkeyzBluezAgent.ask_passkeye        	r#   zLiteral[False]c                      y rr   r"   r   s         r$   r   zBluezAgent.ask_passkeyj   r   r#   c                 D   	 dt         j                  dt        dd f	 fd} j                  |      }t	        d      |z  } j
                  r&t        j                  d        t        d              j                  ||      \   _        	 j
                  s&t        j                  d        t        d             t        t	        d	      |d
      j                           j
                  j                  d|        j
                  j                          y )NrJ   response_idr*   c                     |t         j                  j                  k(  r&j                         } rt	        |      n|       n t        d             | j                          d _        y )NRejected)r   ResponseTypeACCEPTr|   r   r'   destroyrJ   )rJ   r   retr   r^   r   rl   rO   s      r$   passkey_dialog_cbz1BluezAgent.ask_passkey.<locals>.passkey_dialog_cbq   sT    c..555((*z3s8s3&z23NNDKr#   zPairing request for %sz.Agent: Another dialog still active, cancellingCanceledzAgent: Failed to build dialogBluetooth Authenticationri   r   response)r   r   r   r   _rJ   rT   rU   r   r   errorr   showr   present)
rO   r]   r^   r   r   r   r   dev_strnotify_messagerl   s
   ` ` ``   @r$   r   zBluezAgent.ask_passkeyo   s    	cjj 	s 	t 	 	 ((534w>;;LLIJ":./!%!:!:7JPZ![Y{{MM9:":./Q12NiX]]_J(9:r#   r   keyvaluepathc                     |dk(  r|s|dk(  r@|s=| j                   j                  |      }|j                  |       | j                          y y y )NPaired	Connected)rL   popdisconnect_signalrI   )rO   r   r   r   r   	handlerids         r$   _on_device_property_changedz&BluezAgent._on_device_property_changed   sL    8O3++=e++//5I$$Y/OO GL+=r#   c                 n    t        j                  d       | j                          | j                          y )NzAgent.Release)rT   rU   rI   rZ   rX   s    r$   rA   zBluezAgent._on_release   s"    _%r#   c                     t        j                  d       | j                  r3| j                  j                  t        j
                  j                         | j                          y )NzAgent.Cancel)rT   rU   rJ   r   r   r   REJECT_closerX   s    r$   rI   zBluezAgent._on_cancel   s<    ^$;;KK  !1!1!8!89r#   c                 `    | j                   "| j                   j                          d | _         y y rr   )rM   closerX   s    r$   r   zBluezAgent._close   s-    )$$&!%D *r#   c                     t        j                  d       t        d      }| j                  |d|||       | j                  r| j                  j                          y y )NzAgent.RequestPinCodez"Enter PIN code for authentication:FrT   rU   r   r   rJ   r   rO   r   r   r   r]   s        r$   rB   zBluezAgent._on_request_pin_code   sL    +,;<
UKSA;;KK! r#   c                     t        j                  d       t        d      }| j                  |d|||       | j                  r| j                  j                          y y )NzAgent.RequestPasskeyz!Enter passkey for authentication:Tr   r   s        r$   rD   zBluezAgent._on_request_passkey   sL    +,:;
T;C@;;KK! r#   passkeyenteredc                    t        j                  d| d|dd|dd       t        |      }|j                  d| j                        | j
                  |<   |d}t        d	      d| j                  |       d
|d |  d||    d||dz   d   z   }| j                          t        d|dd      | _
        | j                  j                          y )NzDisplayPasskey (, d r   r   property-changed06zPairing passkey for: r   </b>   	Bluetoothr   ri   r   )rT   rU   r   connect_signalr   rL   r   r   r   r   rM   r   )rO   r   r   r   devr   r   s          r$   rE   zBluezAgent._on_display_passkey   s    '}Bwqk71+QOPk*+.+=+=>PRVRrRr+sK(01a8N8N{8[7\\^7:8G}oSWVZ[^_fij_j_k[lZm5o o)+~qT]^!r#   pin_codec                 H   t        j                  d| d| d       t        |      }|j                  d| j                        | j
                  |<   t        d      d| j                  |       d| z   }t        d	|d
d      | _	        | j                  j                          y )NzDisplayPinCode (r   r   r   r   zPairing PIN code forr   r   r   r   ri   r   )rT   rU   r   r   r   rL   r   r   r   rM   r   )rO   r   r   r   r   s        r$   rC   zBluezAgent._on_display_pin_code   s    '}BxjBCk*+.+=+=>PRVRrRr+sK(12q9O9OP[9\8]]_`h_i5jj)+~qT]^!r#   c                 Z   dt         dd ffd}t        j                  d       t        d      d| j	                  |       z   }|r|dt        d      z   d|d	d
z   z  }dt        d      fdt        d      fg}t        d|d||d      | _        | j                  j                          y )Nactionr*   c                 B    | dk(  r         y  t        d             y )NconfirmzUser canceled pairing)r   )r   r   r   s    r$   on_confirm_actionz>BluezAgent._on_request_confirmation.<locals>.on_confirm_action   s    "&'>?@r#   zAgent.RequestConfirmationzPairing request for:
z!Confirm value for authentication: <b>r   r   r   ConfirmdenyDenyr   r   ri   r   )r   rT   rU   r   r   r   rM   r   )rO   r   r   r   r   r   r   actionss      ``   r$   rF   z#BluezAgent._on_request_confirmation   s    	Ac 	Ad 	A 	0112r$:P:PQ\:]9^5__dQ'J%KKPTU\]_T``dNeeeNq|,vqy.AB)+~q'Sd4=?!r#   c                 ,    | j                  |d ||       y rr   )rF   )rO   r   r   r   s       r$   rG   z$BluezAgent._on_request_authorization   s    %%k4SAr#   uuidc                    
 dt         dd f
 fd}t        j                  d        j                        }t	        |      j
                  }t        d      d| dz   t        d      z   d| d	z   }d
t        d      fdt        d      fdt        d      fg}	t        t        d      |d|	|d      

j                           j                  j                  
       y )Nr   r*   c                     t        j                  |        | dk(  rt              j                  dd       | dk(  s| dk(  r         n t	        d             j
                  j                         y )Nalwaysr   TrustedTrx   r   )rT   rU   r   setr'   rN   remove)r   r   nr   r   rO   s    r$   on_auth_actionz8BluezAgent._on_authorize_service.<locals>.on_auth_action   sb    LL !,00DA!Vx%7&z23''..q1r#   zAgent.AuthorizezAuthorization request for:r   zService:r   r   r   zAlways acceptrx   Acceptr   r   r   r   ri   r   )r   rT   rU   r   r   namer   r   r   rN   append)rO   r   r   r   r   r   r   servicer   r   r   s   `` ``     @r$   rH   z BluezAgent._on_authorize_service   s    
	23 
	24 
	2 
	2 	&'((5d#((*+7)2.>>:NSWX_W``dQee 	a01ak*AfI&( 567Tbnwx	##**1-r#   )r*   N)%r   r   r    r=   r<   rW   r[   r   boolr   r   r   r~   r   r   r   r	   r   r
   r   r'   r   r   r   r   rA   rI   r   rB   rD   rE   rC   r   rF   rG   rH   __classcell__)rP   s   @r$   r)   r)   !   sf   -L`&Z
;
! !# !SW !"'

CII(=">!@MS MS M c  UX ^fhkglnrgr^s !5);=O)O#P"QSW"WX]a  c 7G VY _gilhmoshs_t !5);=O)O#P"QSW"WX]a c t # S[]`\acg\gSh !5);=O)O#P"QSW"WX]a:& s 3 VY ^b 
&
" "3%+9N ""*E2DFX2X,Y+Z\`+`"a"fj""s "#8M "!)51CEW1W+X*Y[_*_!`"ei"
"s 
"S 
"3 
"SW 
"" "s "t ""C "(3- "U]^`bf^fUg "&.0B/CT/I&J"OS"&BS Bhr4x>P B'/1C0Dd0J'KBPTB. .C .XbRVhEW .#+-?,@$,F#G.LP.r#   r)   )*rT   r   r   htmlr   	xml.etreer   typingr   r   r   r	   r
   r   r   r   r   blueman.bluez.Devicer   blueman.bluez.AgentManagerr   blueman.Sdpr   blueman.gui.Notificationr   r   r   blueman.main.Builderr   blueman.main.DbusServicer   r   gi.repositoryr   girequire_versionr   typing_extensionsr   r   r'   r)   r"   r#   r$   <module>r     sv        ! ] ] ] ' 3 # [ [ ( ;  	   5%   )' '' 'W. W.r#   