
    |~gw                     *   d dl m Z d dlmZ d dlZd dlZd dlZd dl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 d d	lmZ d d
lmZ d dlmZmZ e	r/d dlmZmZ d dlm Z   G d de       Z! G d de!      Z" G d de!      Z#d Z$ G d dee      Z%y)    )gettext)
itemgetterN)ListTYPE_CHECKINGOptionalCallablecastUnion)Device)DBusNoSuchAdapterError)Notification)ServiceUUID)AppletPlugin)MenuItem)PowerManagerPowerStateListener)MenuSubmenuItemDict)	TypedDictc                   J    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   y)	_ItemBaseadapteraddressaliasiconnameuuidN__name__
__module____qualname__str__annotations__     D/usr/lib/python3/dist-packages/blueman/plugins/applet/RecentConns.pyr   r      s     
			r%   r   c                   2    e Zd ZU eed<   eed<   ee   ed<   y)ItemtimedevicemitemN)r   r    r!   floatr#   r"   r   r   r$   r%   r&   r(   r(      s    ((r%   r(   c                       e Zd ZU eed<   y)
StoredIconr)   Nr   r$   r%   r&   r.   r.   "   s    	r%   r.   c                   >   e Zd ZddgZdZ ed      ZdZdddZe	d	 ed
       ed      dde
dddZd)dZdededdfdZd)dZd)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dfdZdeddfdZdededdfd Zd*d"Zd+d#Zd)d$Zd%ed&edee   fd'Zded!   fd(Zy),RecentConnsDBusServicer   document-open-recent-symboliczIProvides a menu item that contains last used connections for quick accessWalmiszorg.blueman.plugins.recentconnsN)schemapath   zMaximum itemszAThe maximum number of items recent connections menu will display.)r6      )typedefaultr   descrangez[])r8   r9   )	max-itemsrecent-connectionsreturnc                 2    g | _         | j                          y N)_RecentConns__menuitems_rebuild_menuselfs    r&   on_loadzRecentConns.on_load<   s    46r%   managerstatec                 $    | j                          y r@   _rebuild)rD   rF   rG   s      r&   on_power_state_changedz"RecentConns.on_power_state_changedA       r%   c                 b    | j                   j                  j                  j                  |        y r@   )parentPluginsr   
unregisterrC   s    r&   	on_unloadzRecentConns.on_unloadD   s       ++D1r%   c                 N   d| j                   j                  j                         v rQ| j                   j                  j                  j	                         s#| j
                  D ]  }|j                  d        y | j                         }t        |      dk(  r#| j
                  D ]  }|j                  d        y | j
                  D ]  }|j                  d        |d | j                  d       D cg c]  }| j                  |       c}| _        | j                          y c c}w )Nr   Fr   Tr<   )rN   rO   
get_loadedr   get_bluetooth_status_mitemsset_sensitive
_get_itemslen
get_option_build_menu_itemrA   rB   )rD   r+   itemsitems       r&   rJ   zRecentConns._rebuildG   s    T[[00;;==KK''44IIK +##E*+!u:? +##E*+\\ 	&E%	& EJJg4??[fKgDhiDD11$7i js   1D"c                 n    |r| j                          y | j                  D ]  }|j                  d        y )NF)rJ   rU   rV   )rD   rG   r+   s      r&   on_manager_state_changedz$RecentConns.on_manager_state_changed\   s/    MMO +##E*+r%   r5   c                 $    | j                          y r@   rI   rD   r5   s     r&   on_device_createdzRecentConns.on_device_createdc   rL   r%   c                 $    | j                          y r@   rI   r`   s     r&   on_device_removedzRecentConns.on_device_removedf   rL   r%   c                 $    | j                          y r@   rI   r`   s     r&   on_adapter_addedzRecentConns.on_adapter_addedi   rL   r%   c                 $    | j                          y r@   rI   r`   s     r&   on_adapter_removedzRecentConns.on_adapter_removedl   rL   r%   object_pathr   c           
      z   t        |      }t        j                  | d|        	 | j                  j                  j                  |d         }|d   |d   |j                  |d   t        |      j                  |t        t        j                               d}| j                  d      }|D ]4  }|d	   |d	   k(  s|d
   |d
   k(  s|d   |d   k(  s'|d   |d<   ||d<    n |j                  |       | j                  d|       | j!                          y # t        $ r t        j                  d       Y y w xY w)N)obj_path Adapterzadapter not foundAddressIcon)r   r   r   r   r   r   r)   r=   r   r   r   r)   r*   )r   logginginforN   Managerget_adapterr   warningdisplay_namer   r   r"   r)   rY   append
set_optionrJ   )rD   rh   r   r*   r   r\   stored_itemsis           r&   notifyzRecentConns.notifyo   sA   -xq'(	kk))55fY6GHG y)i(((6N%**		$
 ';< 	&A|tI.iLDO3fIf- L&	)(	& %,l;9 & 	OO/0	s   (D D:9D:r(   c                 z    t        j                  dd    dd           d   J dd   d<    j                  j                  j                  j                          d fd	}d
t        t        t        f   dd f fd} j                  j                  j                  j                  d   d   ||       y )NzConnect r   rk   r   r+   F	sensitiver>   c                       d   J t        t        d      t        d       d   d   z   d         j                          d d   d<   j                  j                  j
                  j                          y )	Nr+   	ConnectedzConnected to %stextr   	icon_nameTr{   )r   _showrN   rO   r   on_menu_changed)r\   rD   s   r&   replyz,RecentConns.on_item_activated.<locals>.reply   so    =,,,;+<)=Wf@U)U#'<115)-DM+&KK$$446r%   reasonc                     t        t        d      t        |       j                  d      d   d      j	                          d   J dd   d<   j
                  j                  j                  j                          y )	NzFailed to connectz: zdialog-errorr   r+   Tr{   )	r   r   r"   splitr   rN   rO   r   r   )r   r\   rD   s    r&   errz*RecentConns.on_item_activated.<locals>.err   sm    ./V1B1B41H1L#133746=,,,)-DM+&KK$$446r%   r*   r>   N)ro   rp   rN   rO   r   r   r
   	Exceptionr"   r1   connect_service)rD   r\   r   r   s   ``  r&   on_item_activatedzRecentConns.on_item_activated   s    xY0$v,@AG}(((%*Wk"  002	7	7in- 	7$ 	7 	''77XVV[]`ar%   c                     t        j                  |d         }t        d      |d   |dz  d|d   |d   d   n|d   |d	   d u|d	   d n
t        d
      |d   |d   d   nt        t        g d f   |f fd	      d}||d<   |S )Nr   z%(service)s on %(device)sr   )servicer*   Tr+   r   r   r*   z,Adapter for this connection is not availablecallbackc                 &    j                  |       S r@   )r   )itmrD   s    r&   <lambda>z.RecentConns._build_menu_item.<locals>.<lambda>   s    H^H^_bHc r%   )r~   markupr   r{   tooltipr   )htmlescaper   r	   r   )rD   r\   r   r+   s   `   r&   rZ   zRecentConns._build_menu_item   s    DM*12fY^5__7;G}7Pg{3VZ[aVbht3#H~5t1=k;l6:7m6Ogz2"8BH#5$7cd$
 Wr%   c                 r   | j                   j                  j                  }g | _        |j	                  |        |j                  | dt        d      ddd        t        | j                        D ]4  \  }}| j                  j                   |j
                  | d|ffi |       6 |j                  | d       y )	N4   u   Reconnect to…r2   Fc                       y r@   r$   r$   r%   r&   r   z+RecentConns._rebuild_menu.<locals>.<lambda>   s    r%   )r~   r   r{   r   5   ;   )
rN   rO   r   rU   rP   addr   	enumeraterA   ru   )rD   menuidxr\   s       r&   rB   zRecentConns._rebuild_menu   s    {{**//')r"3 4@_ < 	 	9$T%5%56 	CKS$LLCy AD AB	Crr%   adapter_pathr   c                     	 | j                   j                  j                  |      }| j                   j                  j	                  ||j                               }||j                         S d S # t        $ r Y y w xY wr@   )rN   rq   rr   r   find_deviceget_object_path)rD   r   r   r   r*   s        r&   _get_device_pathzRecentConns._get_device_path   su    	kk))55lCG $$00':Q:Q:ST+1+=v%%'G4G	 & 		s   %A/ /	A;:A;c                 f     t         fd j                  d      D        t        d      d      S )Nc              3      K   | ]H  }j                  |d    |d         xr,|d    |d   |d   |d   |d   |d   t        |d         dd	 J yw)	r   r   r   r   r   r   r)   N)	r   r   r   r   r   r   r)   r*   r+   )r   r,   ).0rx   r*   rD   s     r&   	<genexpr>z)RecentConns._get_items.<locals>.<genexpr>   s{      R "33AiL!I,OOFO Y<Y<7&	&	&	ai( 
 Rs   AAr=   r)   T)keyreverse)sortedrY   r   )rD   r*   s   `@r&   rW   zRecentConns._get_items   s8    R )=>R 6"
 	
r%   r   )r\   r(   r>   N)r\   r(   r>   r   ) r   r    r!   __depends____icon__r   __description__
__author____gsettings__intlist__options__rE   r   boolrK   rQ   rJ   r^   r"   ra   rc   re   rg   ry   r   rZ   rB   r   r   r   rW   r$   r%   r&   r0   r0   (   sG    &)K.HcdOJ 4M
 "!"0 cd&( (,=K
l 4 D 2*+d +t +c d c d S T s t !# !S !T !Fb0 HS H3 H8C= H
DL 
r%   r0   )&r   r   operatorr   r   r)   ro   typingr   r   r   r   r	   r
   blueman.bluez.Devicer   blueman.bluez.errorsr   blueman.gui.Notificationr   blueman.Sdpr   blueman.plugins.AppletPluginr   blueman.plugins.applet.Menur   #blueman.plugins.applet.PowerManagerr   r   r   r   typing_extensionsr   r   r(   r.   REGISTRY_VERSIONr0   r$   r%   r&   <module>r      su          G G ' 7 1 # 5 0 PA+I )y )
Y   v
, 2 v
r%   