
    |~g                          d dl Z d dlZd dlZd dlmZmZmZ d dlmZ 	  e j                  dd       d dlmZmZmZmZ  G d d	e      Z G d
 d      Z G d de      Z G d de      Zy# e
$ r	  ed      w xY w)    N)OptionalCallableUnion)ServiceNMz1.0zNM python bindings not found.)GLibGObjectr   Gioc                       e Zd Zy)NMConnectionErrorN)__name__
__module____qualname__     =/usr/lib/python3/dist-packages/blueman/main/NetworkManager.pyr   r      s    r   r   c            
       ,   e Zd ZU eed<   dedeg df   deeee	j                  f   gdf   fdZdej                  dej                  d	ed
dfdZdej"                  dededed
df
dZddZddZddZed
efd       ZddZd	ed
dfdZed
efd       Zy)NMConnectionBaseconntypeservicereply_handlerNerror_handlerc                    | j                   dvr |t        d| j                    d             |j                  | _        | j                  d   | _        || _        || _        d | _        d | _        t        j                  j                         | _        t        j                  dd| j                   d      | _        d | _        | j!                          y )	N)dunpanuzInvalid connection type z, should be panu or dunAddresszorg.blueman.gsmsettingz/org/blueman/gsmsettings//)	schema_idpath)r   r   devicebdaddrr   r   
connectionactive_connectionr   Clientnewclientr
   SettingsConfig_statehandlerfind_or_create_connection)selfr   r   r   s       r   __init__zNMConnectionBase.__init__   s    ==/!$<T]]OKb"cd nnkk),**!%iimmoll-ENghlhshsgttuLvw,0&&(r   r&   result	conn_uuidreturnc                     	 |j                  |      | _        | j                  |       y # t        j                  $ r}| j	                  |       Y d }~;d }~ww xY wN)add_connection_finishr"   r   Errorr   
store_uuid)r+   r&   r-   r.   es        r   _on_connection_addedz%NMConnectionBase._on_connection_added)   sN    	"$::6BDO 		" zz 	"q!!	"s   * AAAr    	new_state	old_statereasonc                    t        j                  |      }t        j                  |      }t        j                  |      }t        j                  d|j
                   d|j
                   d|j
                          d }|t         j                  j                  k(  rd|j
                   }n|t         j                  j                  k(  rt        j                  d       n|t         j                  j                  k  s|t         j                  j                  k(  rNt         j                  j                  |cxk  rt         j                  j                  k  rn y d|j
                   }ny | j                  J t        j                  || j                         || j                          y t        j                  |       | j                  t        |             y )NzNew: z Old: z	 Reason: zConnection failed with reason: z!Connection successfully activatedz$Connection disconnected with reason )r   DeviceStateDeviceStateReasonloggingdebug
value_nickFAILED	ACTIVATEDDISCONNECTEDDEACTIVATINGr)   r	   signal_handler_disconnectr   r   r   )	r+   r    r7   r8   r9   r%   oldstate_reason	error_msgs	            r   _on_device_state_changedz)NMConnectionBase._on_device_state_changed1   sd   nnY'nnY'++F3cnn-VCNN3C9\MdMdLefg	"..'''9,:Q:Q9RSIBNN,,,MM=>R^^000C2>>;V;V4V,,sNbnn6N6NN  ?|?V?V>WXI !!---))&$2D2DE MM)$0;<r   c                 0    dt         j                  dt        j                  dd f fd} j                  j                   j                        }|s( j                  t        d j                                y |j                         t         j                  j                  k(  r) j                  t        d j                   d             y |j                  d j                         _         j                  j                   j                   |d d |       y )	Nr&   r-   r/   c                     	 | j                  |      _        y # t        j                  $ r}j	                  |       Y d }~y d }~ww xY wr1   )activate_connection_finishr#   r   r3   r   r&   r-   r5   r+   s      r   on_connection_activatez9NMConnectionBase.activate.<locals>.on_connection_activateM   s@    &)/)J)J6)R&:: &""1%%&s    AAAzCould not find device Device z already activatedzstate-changed)r   r$   r
   AsyncResultr&   get_device_by_ifacer!   r   r   	get_stater;   rA   connectrH   r)   activate_connection_asyncr"   )r+   rM   r    s   `  r   activatezNMConnectionBase.activateL   s    	&299 	&coo 	&RV 	& 00=03I$++1WXY2>>#;#;;074;;-GY1Z[\!'A^A^!_DKK11$//64QUWmnr   c                      dt         j                  dt        j                  dd f fd} j                  j                   j                  d |       y )Nr&   r-   r/   c                     	 | j                  |       t        j                  dj                   d       j	                          d _        y # t        j                  $ r}j                  |       Y d }~y d }~ww xY w)NrN   z deactivated successfully)	deactivate_connection_finishr=   r>   r!   r   r#   r   r3   r   rL   s      r   on_connection_deactivatez=NMConnectionBase.deactivate.<locals>.on_connection_deactivate]   si    &33F;}4MNO""$)-&:: &""1%%&s   AA A="A88A=)r   r$   r
   rO   r&   deactivate_connection_asyncr#   )r+   rX   s   ` r   
deactivatezNMConnectionBase.deactivate\   sE    	&RYY 	& 	&TX 	& 	//0F0FNfgr   c                    | j                   s| j                          ne| j                  j                  | j                         }|| j                          n,t	        j
                  d| j                           || _        | j                  dk(  r|j                         }|j                  j                  | j                  d   k7  rCt	        j
                  d| j                  d           | j                  d   |j                  _
        |j                  j                  | j                  d   k7  rCt	        j
                  d| j                  d           | j                  d   |j                  _        |j                  dd        | j                  j                         D ])  }|j                         }|| j                  k(  s#|| _        + y )Nz$Found existing connection with uuid r   apnzUpdating apn on connection to numberz!Updating number on connection to T)connection_uuidcreate_connectionr&   get_connection_by_uuidr=   r>   r"   r   get_setting_gsmpropsr\   r(   r]   commit_changesget_active_connectionsget_connectionr#   )r+   connsettings_gsmactive_conns       r   r*   z*NMConnectionBase.find_or_create_connectionh   st   ##""$;;55d6J6JKD|&&( DTEYEYDZ[\"&==E)#'#7#7#9L#))--U1CC(Ft{{SXGYFZ&[\15U1C**.#))00DKK4II(I$++V^J_I`&ab48KK4I**1##D$/  ;;==? 	5K--/Dt&)4&	5r   c                     | j                   y| j                   j                         }|t        j                  j                  k(  ryy)NFT)r#   rQ   r   ActiveConnectionState	CONNECTED)r+   states     r   	connectedzNMConnectionBase.connected   s?    !!)&&002B,,666r   c                     t         r1   NotImplementedErrorr+   s    r   r_   z"NMConnectionBase.create_connection       !!r   c                     t         r1   ro   r+   r.   s     r   r4   zNMConnectionBase.store_uuid   rr   r   c                     t         r1   ro   rq   s    r   r^   z NMConnectionBase.connection_uuid   s    !!r   r/   N)r   r   r   str__annotations__r   r   r   r   r   r3   r,   r   r$   r
   rO   r6   DeviceintrH   rT   rZ   r*   propertyboolrm   r_   r4   r^   r   r   r   r   r      s   M) )T8J ) (%0A4::0M*N)OQU)U V)$#299 #coo #Z] #bf #=ryy =S =UX =be =jn =6o 
h5: 4  ""C "D " " " "r   r   c                   >    e Zd ZdZdeddfdZedefd       ZddZy)	NMPANConnectionr   r.   r/   Nc                 "    || j                   d<   y N	nmpanuuidr(   rt   s     r   r4   zNMPANConnection.store_uuid       #,K r   c                    | j                   j                         D ]U  }|j                         }||j                         | j                  k(  s4|j                         }|j                         } |S  | j                  d   }|S r   )r&   get_connectionsget_setting_bluetooth
get_bdaddrr!   get_setting_connectionget_uuidr(   )r+   rf   bluetooth_settingconn_settingsress        r   r^   zNMPANConnection.connection_uuid   s     KK//1 	+D $ : : < ,1B1M1M1OSWS^S^1^ $ ; ; =#,,. 
	+ ++k*C
r   c                    t        j                         }| j                  d    d}t        t	        j
                               }t        j                  d||d      }t        j                  | j                  | j                        }|j                  |       |j                  |       | j                  j                  |dd | j                  |       y )NNamez Network	bluetoothFtypeiduuidautoconnectr   r!   T)r   SimpleConnectionr    rw   r   uuid4SettingConnectionSettingBluetoothr   r!   add_settingr&   add_connection_asyncr6   )r+   rf   conn_idr.   	conn_settconn_sett_bts         r   r_   z!NMPANConnection.create_connection   s    ""$[[()2

%	((kgIchi	**dkkR#&((tT4;T;TV_`r   rv   	r   r   r   r   rw   r4   r{   r^   r_   r   r   r   r~   r~      s;    H-C -D -   
ar   r~   c                   >    e Zd ZdZdeddfdZedefd       ZddZy)	NMDUNConnectionr   r.   r/   Nc                 "    || j                   d<   y N	nmdunuuidr   rt   s     r   r4   zNMDUNConnection.store_uuid   r   r   c                 $    | j                   d   }|S r   r   )r+   r   s     r   r^   zNMDUNConnection.connection_uuid   s    ;;{+
r   c                    | j                   d   s| j                  t        d             y t        j                         }d| j
                  j                   }t        t        j                               }t        j                  d||d      }t        j                  | j                  | j                        }t        j                  | j                   d   | j                   d   	      }|j                  |       |j                  |       |j                  |       | j                   j#                  |d
d | j$                  |       y )Nr\   z9No apn configured, make sure to configure dialup settingszblueman dun for r   Fr   r   r]   )r\   r]   T)r(   r   r   r   r   r    display_namerw   r   r   r   r   r   r!   
SettingGsmr   r&   r   r6   )r+   rf   r   r.   r   r   conn_sett_gsms          r   r_   z!NMDUNConnection.create_connection   s    {{5!01lmn""$$T[[%=%=$>?

%	((kgIchi	**dkkR$++e*<T[[QYEZ[#&'((tT4;T;TV_`r   rv   r   r   r   r   r   r      s;    H-C -D -   ar   r   )gir=   r   typingr   r   r   blueman.Servicer   require_version
ValueErrorImportErrorgi.repositoryr   r	   r   r
   	Exceptionr   r   r~   r   r   r   r   <module>r      s    	   , , #7BtU# 1 0		 	D" D"Na& aBa& ae  7
5
667s   A) )A7