o
    \c                     @   s   d dl mZ d dlmZ d dlZd dl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 G d	d
 d
ZG dd dZG dd de
eZdS )    )Enum)gettextN)CallableAnyOptional)AppletPlugin)Adapter)GLib)StatusIconProviderc                   @   s"   e Zd ZdddeddfddZdS )PowerStateListenermanagerPowerManagerstatereturnNc                 C      d S N )selfr   r   r   r   E/usr/lib/python3/dist-packages/blueman/plugins/applet/PowerManager.pyon_power_state_changed      z)PowerStateListener.on_power_state_changed)__name__
__module____qualname__boolr   r   r   r   r   r      s    r   c                   @   s:   e Zd ZdddZdddedeegd	f dd	fd
dZd	S )PowerStateHandlerr   PowerManager.Statec                 C   r   r   r   r   r   r   r   on_power_state_query   r   z&PowerStateHandler.on_power_state_queryr   r   r   cbNc                 C   r   r   r   )r   r   r   r   r   r   r   on_power_state_change_requested   s   z1PowerStateHandler.on_power_state_change_requested)r   r   )r   r   r   r   r   r   r    r   r   r   r   r      s    

r   c                   @   s:  e Zd ZddgZdZedZdZdZddd	Z	d
e
dededdiZG dd deZd4ddZd4ddZede
fddZde
ddfddZde
fddZde
ddfddZG dd dZd5de
d!e
ddfd"d#Zd4d$d%Zde
fd&d'Zd(ed)ed*eddfd+d,Zd4d-d.Zdee fd/d0Zd1eddfd2d3ZdS )6r   
StatusIconMenuTz'Controls Bluetooth adapter power statesWalmiszgnome-power-manager-symbolicz org.blueman.plugins.powermanagerN)schemapathauto-power-onzAuto power-onzAutomatically power on adapters)typedefaultnamedescc                   @   s   e Zd ZdZdZdZdS )r         r   N)r   r   r   ONOFF
OFF_FORCEDr   r   r   r   State1   s    r0   r   c              	   C   sp   | j jjj| dtdddtd| jd| _d| _d| _d| _	| 
dd	 | d
dd| j | ddd	| j d S )Nr,   <b>Turn Bluetooth _Off</b>Tbluetooth-disabled-symbolicTurn off all adapters)textmarkup	icon_nametooltipcallbackFBluetoothStatusChangedbSetBluetoothStatus)r:    GetBluetoothStatusr   )parentPluginsr"   add_on_bluetooth_toggleditemadapter_statecurrent_staterequest_in_progress_add_dbus_signal_add_dbus_methodrequest_power_stateget_bluetooth_statusr   r   r   r   on_load6   s   zPowerManager.on_loadc                 C   s   | j jj|  d S r   )r>   r?   r"   
unregisterr   r   r   r   	on_unloadD   s   zPowerManager.on_unloadc                 C      | j S r   rE   r   r   r   r   CurrentStateG   s   zPowerManager.CurrentStater   c                    s*   |rdt f fdd}td| d S d S )Nr   c                      s6       _ dr jddd dS   j dS )Nr&   T)forceF)get_adapter_staterD   
get_optionrI   r   r   r   r   timeoutM   s   

z6PowerManager.on_manager_state_changed.<locals>.timeouti  )r   r	   timeout_add)r   r   rT   r   r   r   on_manager_state_changedK   s   z%PowerManager.on_manager_state_changedc                 C   s,   | j j }|D ]	}|d s dS qt|S )NPoweredF)r>   Managerget_adaptersr   )r   adaptersadapterr   r   r   rR   W   s   zPowerManager.get_adapter_statec                 C   s\   zt | | jj }|D ]}|d| q|| _W d S  ty-   t jddd Y d S w )NrW   zException occurredT)exc_info)	logginginfor>   rX   rY   setrD   	Exceptionerror)r   r   rZ   r[   r   r   r   set_adapter_state^   s   
zPowerManager.set_adapter_statec                   @   sH   e Zd ZdddefddZdeddfd	d
ZdddZdefddZdS )zPowerManager.Callbackr>   r   r   c                 C   s2   || _ d| _d| _|| _d| _td| j| _d S )Nr   Fi  )	r>   num_cbcalledr   successr	   rU   rT   timer)r   r>   r   r   r   r   __init__j   s   zPowerManager.Callback.__init__resultr   Nc                 C   s$   |  j d7  _ |rd| _|   d S )Nr,   T)rd   re   check)r   rh   r   r   r   __call__r   s   zPowerManager.Callback.__call__c                 C   sJ   | j | jkr#t| j td | j| j	 | j
  d| j_d S d S )Nzcallbacks doneF)rd   rc   r	   source_removerf   r]   r^   r>   rb   r   update_power_staterF   r   r   r   r   ri   z   s   

zPowerManager.Callback.checkc                 C   s    t d | j  d| j_dS )Nz)Timeout reached while setting power stateF)r]   r^   r>   rl   rF   r   r   r   r   rT      s   

zPowerManager.Callback.timeoutr   N)r   r   r   r   rg   rj   ri   rT   r   r   r   r   Callbacki   s
    
rn   FrQ   c                 C   s   | j |ks|rB| js;d| _td|  t| |}t| jj	t
}|D ]	}|| || q&t||_|  d S td d S d S )NTzRequesting zAnother request in progress)rE   rF   r]   r^   r   rn   listr>   r?   get_loaded_pluginsr   r    lenrc   ri   )r   r   rQ   r   handlershandlerr   r   r   rI      s   
z PowerManager.request_power_statec                    s  dd  j jtD }t fdd|D p j } jj|v } jj|v p) j}d}|s0|rR j	j
tddd  j	d  j	td	  j	|  d
}n%|rw jsw j	j
tddd  j	d  j	td  j	d d}td| d| d| d j d| 
  j|krtd|  | _ d|  j jtD ]}| | q|rȈ j jjtd  j jjjdd n j jjtd  j jj   j jj  d S d S )Nc                 S   s   g | ]}|  qS r   )r   ).0pluginr   r   r   
<listcomp>   s    z3PowerManager.update_power_state.<locals>.<listcomp>c                 3   s    | ]	}| j jkV  qd S r   )r0   r-   )rt   xr   r   r   	<genexpr>   s    z2PowerManager.update_power_state.<locals>.<genexpr>Tz<b>Turn Bluetooth _On</b>)r5   zbluetooth-symboliczTurn on all adaptersFr1   r2   r3   zoff z | foff z | on z | current state z | new state zSignalling r9   zBluetooth Enabled)delay_hidingzBluetooth Disabled)r>   r?   rp   r   anyrD   r0   r/   r-   rC   set_textrA   set_icon_nameset_tooltipset_sensitiverE   r]   r^   _emit_dbus_signalr   r   r!   set_tooltip_titlequery_visibilityicon_should_change)r   retsofffoffon	new_stateru   r   r   r   rl      sB   
*
zPowerManager.update_power_statec                 C   rN   r   rO   r   r   r   r   rJ      s   z!PowerManager.get_bluetooth_status_pathkeyvaluec                 C   s@   |dkr|r| j std | d |  | _|   d S d S )NrW   z;adapter powered on while in off state, turning bluetooth onT)rE   r]   warningrI   rR   rD   rl   )r   r   r   r   r   r   r   on_adapter_property_changed   s   



z(PowerManager.on_adapter_property_changedc                 C   s   |  | j  d S r   )rI   rE   r   r   r   r   rB      s   z!PowerManager.on_bluetooth_toggledc                 C   s   |   sdS d S )Nzblueman-disabled)rJ   r   r   r   r   on_status_icon_query_icon   s   z&PowerManager.on_status_icon_query_iconr%   c                 C   s   t |d}|d| j d S )N)obj_pathrW   )r   r_   rD   )r   r%   r[   r   r   r   on_adapter_added   s   
zPowerManager.on_adapter_addedrm   )F) r   r   r   __depends____unloadable__rA   __description__
__author____icon____gsettings__r   __options__r   r0   rK   rM   propertyrP   rV   rR   rb   rn   rI   rl   rJ   strr   r   rB   r   r   r   r   r   r   r   r      s@    	


-
	r   )enumr   r   rA   r]   typingr   r   r   blueman.plugins.AppletPluginr   blueman.bluez.Adapterr   gi.repositoryr	   !blueman.plugins.applet.StatusIconr
   r   r   r   r   r   r   r   <module>   s    	