
    |~gT                        d dl m Z d dlZd dlmZmZmZmZ d dlm	Z	m
Z
 d dlZd dlZd dlmZ d dlmZ d dlmZmZ d dlmZ d	Zd Zd
Zd	ZdZdZej8                  j;                  d      s ed       G d d      Z G d deee      Z y)    )gettextN)DictCallableAnyOptional)GLibGio)	Mechanism)AppletPlugin)PowerManagerPowerStateHandler)StatusIconVisibilityHandler            /dev/rfkillzHardware kill switch not foundc                   $    e Zd ZdedededefdZy)Switchidxswitch_typesofthardc                 <    || _         || _        || _        || _        y N)r   typer   r   )selfr   r   r   r   s        C/usr/lib/python3/dist-packages/blueman/plugins/applet/KillSwitch.py__init__zSwitch.__init__   s    			    N)__name__
__module____qualname__intr    r    r   r   r      s#    C c  C r    r   c                   X   e Zd ZU dZ ed      ZdgZdZdddZde	d	d
iZ
i Zeeef   ed<   dZdZd	ZddZddZdej,                  dededdfdZdej,                  deddfdZdej6                  dej8                  de	fdZdej>                  fdZ dede	de!e	gdf   ddfdZ"de	fdZ#y)
KillSwitchWalmiszSwitches Bluetooth killswitch status to match Bluetooth power state. Allows turning Bluetooth back on from an icon that shows its status; provided it isn't unplugged by the system, or physically.r   zsystem-shutdown-symboliczorg.blueman.plugins.killswitchN)schemapathcheckedF)r   default	_switchesTreturnc                    d | _         t        j                  t        j                  j                  dt        j
                  j                  | j                  | j                        | _	        t        j                  j                  dd      }|t        d      t        j                  |t        j                  t        j                   z  t        j"                  z  | j$                        | _        y )Nnet.connmanr   rzCould not access RF kill switch)_connman_proxyr	   bus_watch_nameBusTypeSYSTEMBusNameWatcherFlagsNONE_on_connman_appeared_on_connman_vanished_connman_watch_idr   	IOChannelnew_fileImportErrorio_add_watchIO_INIO_ERRIO_HUPio_event_iom)r   channels     r   on_loadzKillSwitch.on_load8   s    7;!$!3!3CKK4F4FWZWnWnWsWs484M4MtOhOh"j ..))-=??@@%%gtzzDKK/G$++/UW[WdWde	r    c                     t        j                  | j                         d | _        | j                  r t        j                  | j                         y y r   )r	   bus_unwatch_namer:   r2   rC   r   source_remover   s    r   	on_unloadzKillSwitch.on_unloadC   s<    T334"99tyy) r    
connectionnameownerc           	          t        j                  | d       t        j                  j	                  t        j
                  j                  t        j                  j                  d dddd       | _	        y )Nz	 appearedr0   z!/net/connman/technology/bluetoothznet.connman.Technology)
logginginfor	   	DBusProxynew_for_bus_syncr4   r5   DBusProxyFlagsDO_NOT_AUTO_STARTr2   )r   rK   rL   rM   s       r   r8   zKillSwitch._on_connman_appearedI   sW    vY'(!mm<<KK00/$r    c                 B    t        j                  | d       d | _        y )Nz	 vanished)rO   rP   r2   )r   rK   rL   s      r   r9   zKillSwitch._on_connman_vanishedT   s    vY'("r    rD   	conditionc                    |t         j                  z  s|t         j                  z  ry|j                         }t	        j
                  |t              }t        |      t        k7  r"t        j                  dt        |              yt        j                  d|      \  }}}}}	|t        k7  ry|t        k(  r4t        ||||	      | j                  |<   t        j                   d|        n|t"        k(  r&| j                  |= t        j                   d|        nv|t$        k(  rl| j                  |   j&                  |k7  s| j                  |   j(                  |	k7  r4t        ||||	      | j                  |<   t        j                   d|        nyd| _        d| _        | j                  j/                         D ]W  }
| xj,                  |
j(                  dk(  z  c_        | xj*                  |
j&                  d	k(  xr |
j(                  d	k(  z  c_        Y t        j                   d
| j*                          d| j0                  j2                  j5                         v r;| j0                  j2                  j6                  j9                  | j,                          | j0                  j2                  j:                  j=                          y)NFzBad rfkill event size: TIBBBBzkillswitch registered zkillswitch removed zkillswitch changed r   r   zState: 
StatusIcon)delay_hiding)r   r@   rA   unix_get_fdosreadRFKILL_EVENT_SIZE_V1lenrO   warningstructunpackRFKILL_TYPE_BLUETOOTHRFKILL_OP_ADDr   r-   rP   RFKILL_OP_DELRFKILL_OP_CHANGEr   r   _enabled_hardblockedvaluesparentPlugins
get_loadedrY   query_visibilityr   update_power_state)r   rD   rV   fddatar   r   opr   r   ss              r   rB   zKillSwitch.io_eventX   s2   t{{"i$++&=  "wwr/0t9,,OO5c$i[AB-3]]7D-I*k2tT//"(k4"FDNN3LL1#78= s#LL.se45##)<)A)AT)IT^^\_M`MeMeimMm"(k4"FDNN3LL.se45!&&( 	;A1,MMaffk9affk:M	; 	wt}}o./4;;..99;;KK**;;TM^M^I^;_((;;=r    c                     | j                   rt        j                  j                  S | j                  rt        j                  j
                  S t        j                  j                  S r   )rh   r   State
OFF_FORCEDrg   ONOFFrI   s    r   on_power_state_queryzKillSwitch.on_power_state_query   sH    %%000]]%%(((%%)))r    _statecbc                    t        j                  |       dt        dd ffd}dt        dd ffd}| j                  rVt        j                  d|        | j                  j                  ddt        j                  j                  |      ||       y t        j                  d	|        t               j                  d
|||       y )Nry   r.   c                       d       y )NTr%   ry   r{   s    r   replyz9KillSwitch.on_power_state_change_requested.<locals>.reply   s
    tHr    c                       d       y )NFr%   r~   s    r   errorz9KillSwitch.on_power_state_change_requested.<locals>.error   s
    uIr    zUsing connman to set state: z(sv)Powered)result_handlererror_handlerzUsing mechanism to set state: z(b))rO   rP   r   r2   debugSetPropertyr   Variantnew_booleanr
   SetRfkillState)r   ry   rz   r{   r   r   s      `  r   on_power_state_change_requestedz*KillSwitch.on_power_state_change_requested   s    U	c 	d 		c 	d 	 MM8@A++FIt||?W?WX]?^;@PU , W MM:5'BCK&&ueEY^&_r    c                 :    | j                    xr | j                   S r   )rh   rg   rI   s    r   %on_query_force_status_icon_visibilityz0KillSwitch.on_query_force_status_icon_visibility   s    $$$:T]])::r    )r.   N)$r!   r"   r#   
__author__ry   __description____depends____icon____gsettings__bool__options__r-   r   r$   r   __annotations__rC   rg   rh   rE   rJ   r	   DBusConnectionstrr8   r9   r   r;   IOConditionrB   r   rt   rx   r   r   r   r%   r    r   r'   r'   #   s=   J T UO ""K)H 3M
 	DU3K $&ItCK %DHL	f*	s/A/A 	 	UX 	]a 	#s/A/A # #QU #( (4;K;K (PT (T*l&8&8 *` `d `PXZ^Y_aeYePf `ko `";t ;r    r'   )!r   ry   r\   typingr   r   r   r   gi.repositoryr   r	   ra   rO   blueman.main.DBusProxiesr
   blueman.plugins.AppletPluginr   #blueman.plugins.applet.PowerManagerr   r   !blueman.plugins.applet.StatusIconr   rc   rd   re   rf   RFKILL_OP_CHANGE_ALLr^   r*   existsr=   r   r'   r%   r    r   <module>r      s      	 0 0 #   . 5 O I    	ww~~m$
6
77 z;02M z;r    