
    |~g                         d dl 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 d dlmZmZ d dlmZ d dlmZmZmZ erd dlmZ d d	lmZmZ d d
lmZmZ  G d de      Zy)    N)gettext)escape)TYPE_CHECKINGAnyDictListMappingCallable)	EventTypePulseAudioUtils)AppletPlugin)AUDIO_SINK_SVCLASS_IDAUDIO_SOURCE_SVCLASS_IDServiceUUID)Device)CardInfoCardProfileInfo)MenuItemSubmenuItemDictc                       e Zd ZdgZ ed      ZdZddZddZddZ	dd	Z
dd
ZddZdedededdfdZdeddfdZdeddfdZdeddfdZdedededdfdZdeddfdZddZddZy)AudioProfilesMenuz3Adds audio profile selector to the status icon menuzAbhijeet ViswareturnNc                     i | _         i | _        | j                  j                  j                  | _        t               }|j                  d| j                         |j                  d| j                         y )Nevent	connected)
_devices_device_menusparentPluginsr   _menur   connecton_pa_eventon_pa_ready)selfpas     J/usr/lib/python3/dist-packages/blueman/plugins/applet/PulseAudioProfile.pyon_loadzAudioProfiles.on_load   sX    /146[[((--



7D,,-


; 0 01    c                     | j                   j                  j                         }|D ]  }|d   s	| j                  |        y N	Connected)r   Managerget_devicesrequest_device_profile_menu)r%   devicesdevices      r'   generate_menuzAudioProfiles.generate_menu    s?    ++%%113 	9Fk"008	9r)   c                    d}|d   D ]'  }t        |      j                  t        t        fv s%d} n |d   rO|rLt	               }|j
                  sy |d   | j                  vr| j                  |       y | j                  |       y y y )NFUUIDsTr,   Address)	r   
short_uuidr   r   r   r   r   query_paadd_device_profile_menu)r%   r1   audio_sourceuuidr&   s        r'   r/   z)AudioProfiles.request_device_profile_menu&   s    7O 	D4 ++0GI^/__#	
 +< "B<<)$5f%,,V4 $0r)   c                 z    dddddt         g d f   f fddddt        d	   ffd
 j                  d      t        d  j                  j                         D        d      dz   } j                  j                   d|ft        d      j                  z  dfd      }| j                  d   <   y )Nr1   r   profiler   r   c                      d fd}|S )Nc                  *    j                          y N)on_activate_profile)r1   r<   r%   s   r'   _wrapperzZAudioProfiles.add_device_profile_menu.<locals>._activate_profile_wrapper.<locals>._wrapper9   s    ((9r)   r   N )r1   r<   rA   r%   s   `` r'   _activate_profile_wrapperzHAudioProfiles.add_device_profile_menu.<locals>._activate_profile_wrapper8   s    :Or)   infor   r   c                     g }| s|S | d   D ]D  }t        |d         }d}|d   | d   k(  rd| d}d}|j                  |d	|d	 |      d
d       F |S )Nprofilesdescriptionzbluetooth-symbolicnameactive_profilez<b>z</b>z	dialog-okT )textmarkup	icon_name	sensitivecallbacktooltip)r   append)rE   itemsr<   profile_nameprofile_iconrD   r1   s        r'   _generate_profiles_menuzFAudioProfiles.add_device_profile_menu.<locals>._generate_profiles_menu=   s    -/E
+ %gm&<=36?d+;&<<%(d#;L#.L("!-!% 9&' J!  Lr)   r5   c              3   :   K   | ]  }|j                   d      yw)   N)priority).0items     r'   	<genexpr>z8AudioProfiles.add_device_profile_menu.<locals>.<genexpr>R   s     L4==#Ls   )defaultrX   *   zAudio Profiles for %szaudio-card-symbolicc                              S r?   rC   )rV   rE   s   r'   <lambda>z7AudioProfiles.add_device_profile_menu.<locals>.<lambda>U   s    7Nt7T r)   )rN   submenu_function)
r
   r   r   maxr   valuesr!   add_display_name)r%   r1   idxmenurD   rV   rE   s   ``  @@@r'   r8   z%AudioProfiles.add_device_profile_menu7   s    	h 	AR 	W_`bdh`hWi 	
	* 	>O9P 	( }}VI./L0B0B0I0I0KLVXY\]]zz~~dRIq1H/IFL_L_/_(=/T  V 156),-r)   c                 n     dt         t        df   dd f fd}t               }|j                  |       y )Ncardsr   r   c                     | j                         D ]5  }|d   d   d   k(  s|j                  d   <   j                          y  y )Nproplistdevice.stringr5   )rd   r   r8   )rk   cr1   r%   s     r'   list_cbz'AudioProfiles.query_pa.<locals>.list_cbY   sR    \\^ Z=1VI5FF78DMM&"34008	r)   )r	   strr   
list_cards)r%   r1   rp   r&   s   ``  r'   r7   zAudioProfiles.query_paX   s5    	73
?3 	 	 
gr)   c                     t               }| j                  |d      }dt        dd ffd}|j                  |d   d   |       y )Nr5   resr   c                 B    | st        j                  dd           y y )NzFailed to change profile to rI   )loggingerror)rt   r<   s    r'   	on_resultz4AudioProfiles.on_activate_profile.<locals>.on_resulth   s$     <WV_<MNO r)   indexrI   )r   r   intset_card_profile)r%   r1   r<   r&   ro   rx   s     `   r'   r@   z!AudioProfiles.on_activate_profilec   sP    MM&+,	P3 	P4 	P 	AgJCr)   utilsr   rh   c                     t        j                  | d|        d fd}|t        j                  z  t        j                  k(  rt        j
                  d       |t        j                  z  t        j                  k(  r(t        j
                  d       |j                  ||       y |t        j                  z  t        j                  k(  rt        j
                  d       y t        j
                  d       |j                  ||       y y )N cardc                     d}| d   |v r6| j                   | d   d   <   j                          j                          y y )N)zmodule-bluetooth-device.czmodule-bluez4-device.czmodule-bluez5-device.cdriverrm   rn   )r   
clear_menur2   )r   driversr%   s     r'   get_card_cbz.AudioProfiles.on_pa_event.<locals>.get_card_cbq   sK    1G H~(CGd:.?@!""$ )r)   changeremovere   )r   r   r   N)
rv   debugr   FACILITY_MASKCARDrE   	TYPE_MASKCHANGEget_cardREMOVE)r%   r|   r   rh   r   s   `    r'   r#   zAudioProfiles.on_pa_eventn   s    q&'	% 9***inn<LL y***i.>.>>X&sK0,,,	0@0@@X&U#sK0 =r)   _utilsc                 N    t        j                  d       | j                          y )NzPulseAudio Ready)rv   rE   r2   )r%   r   s     r'   r$   zAudioProfiles.on_pa_ready   s    '(r)   pathc                 D    | j                          | j                          y r?   r   r2   r%   r   s     r'   on_adapter_addedzAudioProfiles.on_adapter_added       r)   c                 D    | j                          | j                          y r?   r   r   s     r'   on_adapter_removedz AudioProfiles.on_adapter_removed   r   r)   keyvaluec                 P    |dk(  r!| j                          | j                          y y r+   r   )r%   r   r   r   s       r'   on_device_property_changedz(AudioProfiles.on_device_property_changed   s%    +OO  r)   statec                 $    | j                          y r?   r   )r%   r   s     r'   on_manager_state_changedz&AudioProfiles.on_manager_state_changed       r)   c                 $    | j                          y r?   r   r%   s    r'   	on_unloadzAudioProfiles.on_unload   r   r)   c                 H    i | _         | j                  j                  |        y r?   )r   r!   
unregisterr   s    r'   r   zAudioProfiles.clear_menu   s    

d#r)   rB   )r1   r   r   N)r1   r   r<   r   r   N)__name__
__module____qualname____depends__rf   __description__
__author__r(   r2   r/   r8   r7   r@   r   rz   r#   r$   rq   r   r   r   r   boolr   r   r   rC   r)   r'   r   r      s    (KMNO!J295"5B		D1 1 13 14 10/ d S T s t !s ! !S !T !
d t $r)   r   )rv   r   rf   htmlr   typingr   r   r   r   r	   r
   blueman.main.PulseAudioUtilsr   r   blueman.plugins.AppletPluginr   blueman.Sdpr   r   r   blueman.bluez.Devicer   r   r   blueman.plugins.applet.Menur   r   r   rC   r)   r'   <module>r      s@        D D C 5& & +FEN$L N$r)   