
    Eg                     v    d dl mZmZmZmZ d dlmZ d dlmZ  G d de      Z	 G d de      Z
 G d d	e      Zy
)    )GioGObjectCScreensaverGLib)IntEnum)
BaseClientc                   0    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)
DeviceTyper                           N)__name__
__module____qualname__Unknown	LinePowerBatteryUpsMonitorMouseKeyboardPdaPhone     9/usr/share/cinnamon-screensaver/dbusdepot/uPowerClient.pyr
   r
      s/    GIG
CGEH
CEr    r
   c                   (    e Zd ZdZdZdZdZdZdZdZ	y)	DeviceStater   r   r   r   r   r   r   N)
r   r   r   r   ChargingDischargingEmptyFullyChargedPendingChargePendingDischarger   r    r!   r#   r#      s&    GHKELMr    r#   c                        e Zd ZdZej
                  j                  ddfej
                  j                  dej                  ffdZdZ	dZ
 fdZd Zd	 Zdd
Zd ZddZd Zd ZddZd Zd Zd Zd Zd Z xZS )UPowerClientz
    This client communicates with the upower provider, tracking the power
    state of the system (laptops - are we on battery or plugged in?)
    Nr   )power-state-changedpercentage-changedzorg.freedesktop.UPowerz/org/freedesktop/UPowerc                     t         t        |   t        j                  j
                  t        j                  | j                  | j                         d| _
        d| _        d| _        d| _        g | _        y )NFr   T)superr+   __init__r   BusTypeSYSTEMr   UPowerProxyUPOWER_SERVICEUPOWER_PATHhave_battery
plugged_inupdate_state_iddevices_dirtyrelevant_devices)self	__class__s    r!   r0   zUPowerClient.__init__)   sb    lD*3;;+=+=+7+C+C+/+>+>+/+;+;	=
 " ! "r    c                     | j                   j                  d| j                         | j                   j                  d| j                         | j                          y )Nzdevice-removedzdevice-added)proxyconnecton_device_added_or_removedqueue_update_stater;   s    r!   on_client_setup_completez%UPowerClient.on_client_setup_complete7   sC    

+T-L-LM

>4+J+JK!r    c                 2    d| _         | j                          y )NT)r9   rA   )r;   r>   paths      r!   r@   z'UPowerClient.on_device_added_or_removed<   s    !!r    c                 $    | j                          y N)rA   r;   r>   pspecdatas       r!   on_battery_changedzUPowerClient.on_battery_changed@   s    !r    c                     | j                   dkD  r&t        j                  | j                          d| _         t        j                  | j                         y )Nr   )r8   r   source_removeidle_addidle_update_cbrB   s    r!   rA   zUPowerClient.queue_update_stateC   s@    !#!!$"6"67#$D ,,-r    c                     | j                   r| j                          d| _         | j                         r| j                          y y )NF)r9   rescan_devicesupdate_stateemit_changed)r;   rJ   s     r!   rO   zUPowerClient.idle_update_cbJ   s<    !" r    c                 6   t        | j                        dkD  r1| j                  D ]"  \  }}|j                  |j                         ~~$ g | _        	 | j                  j                         D ]  }	 t        j                  j                  t        j                  j                  t        j                  j                  | j                  |d       }|j                  d      t         j"                  t         j$                  fv r>| j                  j'                  ||f       |j)                  d| j*                        |_         	 | j3                          y # t,        j.                  $ r t1        d|d       Y w xY w# t,        j.                  $ r t1        d       Y Xw xY w)Nr   typenotifyz0UPowerClient had trouble connecting with device:z - skipping itz]UPowerClient had trouble enumerating through devices.  The battery indicator will be disabled)lenr:   
disconnectprop_changed_idr>   call_enumerate_devices_syncr   UPowerDeviceProxynew_for_bus_syncr   r1   r2   DBusProxyFlagsNONEr4   get_propertyr
   r   r   appendr?   on_device_properties_changedr   ErrorprintrA   )r;   rE   devs      r!   rQ   zUPowerClient.rescan_devicesS   se   t$$%)!22 	cs223
 !#	s 

>>@ ff&88II#++J\J\JMJ\J\JaJaJNJ]J]JNJN	PC ''/J4F4F
H\H\3]]--44dC[A.1kk(DDeDe.f+f  	! zz fLdTdefzz 	sqr	ss7   E7 0CE<E7  E40E7 3E44E7 7FFc                 ,   d}| j                   }| j                  }d}d}| j                  D ]L  \  }}|j                  d      t        j
                  k(  s)|j                  d      t        j                  k7  }d}N ||k7  s||k7  rd}|| _        || _         |S )NFrU   stateT)r7   r6   r:   r_   r
   r   r#   r%   )r;   changesold_plugged_inold_have_batterynew_plugged_innew_have_batteryrE   rd   s           r!   rR   zUPowerClient.update_stateq   s    ,,  .. 	(ID#':+=+==!$!1!1'!:k>U>U!U#' 	(
 n,2BFV2VG 0D,DOr    c                     |j                   dv r| j                          |j                   dk(  r| j                  |       y y )N)onlinez	icon-namerf   
percentage)namerA   emit_percentage_changedrH   s       r!   ra   z)UPowerClient.on_device_properties_changed   s:    ::99##%::%((/ &r    c                 &    | j                  d       y )Nr,   emitrB   s    r!   rS   zUPowerClient.emit_changed   s    		'(r    c                 (    | j                  d|       y )Nr-   rr   )r;   batterys     r!   rp   z$UPowerClient.emit_percentage_changed   s    		&0r    c                     t        | j                        dk(  rg S g }| j                  D ];  \  }}|j                  d      t        j                  k(  s)|j                  ||f       = |S )Nr   rU   )rW   r:   r_   r
   r   r`   )r;   retrE   rd   s       r!   get_batterieszUPowerClient.get_batteries   sh    t$$%*I.. 	(ID#':+=+==

D#;'	( 
r    c                     | j                         }|g k(  ryd}|D ]:  \  }}|j                  d      t        j                  t        j                  fvs8d} n | j
                  xr |S )z
        This figures out whether the power widget should be shown or not -
        currently we only show the widget if we have batteries and are not
        plugged in.
        Trf   F)rx   r_   r#   r'   r   r7   )r;   	batteriesall_batteries_fullrE   rd   s        r!   full_and_on_ac_or_no_batteriesz+UPowerClient.full_and_on_ac_or_no_batteries   st     &&(	?!" 	ID#(1I1I;K^K^0__%*"	
 5#55r    c                     t        d       y )NzVFailed to establish a connection with UPower - the battery indicator will be disabled.)rc   )r;   argss     r!   
on_failurezUPowerClient.on_failure   s    fgr    rG   )r   r   r   __doc__r   SignalFlagsRUN_LASTObject__gsignals__r4   r5   r0   rC   r@   rK   rA   rO   rQ   rR   ra   rS   rp   rx   r|   r   __classcell__)r<   s   @r!   r+   r+      s    
 !( 3 3 < <dBG&22;;TGNNCTUL
 .N.K#"
"". "<.0)1
6(hr    r+   N)gi.repositoryr   r   r   r   enumr   dbusdepot.baseClientr   r
   r#   r+   r   r    r!   <module>r      s;    ; :  +	 	' Zh: Zhr    