o
    \ch                     @   s   d dl m 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 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlZd dlZd dlmZ d dlmZ er\d dlmZ G dd dZG dd dZG dd deeZ dS )    )gettext)TYPE_CHECKINGCallableUnion)RFCOMMError)SerialService)Device)AppletPlugin)Notification)	Mechanism)Config)GLibN)RFCOMMConnectHandler)DialupNetwork)BluemanAppletc                   @   s&   e Zd ZdedededdfddZdS )PPPConnectedListenerdevicerfcommppp_portreturnNc                 C   s   d S N )selfr   r   r   r   r   C/usr/lib/python3/dist-packages/blueman/plugins/applet/PPPSupport.pyon_ppp_connected   s   z%PPPConnectedListener.on_ppp_connected)__name__
__module____qualname__r   strr   r   r   r   r   r      s    r   c                   @   s   e Zd Zdddededeegdf deejgdf f
dd	Z	d
e
fddZdedejddd
dfddZdededdd
dfddZdS )
Connectionappletr   serviceportokNerrc           	      C   sv   || _ || _|| _|| _|| _tjg dtjd \}}d|v r5d}t	
d| d t|| j d S |   d S )N)psaxz-ozpid,args)stdouts   ModemManager
   z-ModemManager is running, delaying connection z sec for it to complete probing)reply_handlererror_handlerr!   r"   parent
subprocessPopenPIPEcommunicatelogginginfor   timeout_add_secondsconnect)	r   r    r!   r"   r#   r$   r'   stderrtimeoutr   r   r   __init__   s   zConnection.__init__r   c                 C   sH   t dd| jjd  d}t }|jd| j|d |d | j| jd d	S )
Nzorg.blueman.gsmsettingz/org/blueman/gsmsettings/Address/z(uss)numberapn)result_handlerr*   F)r   r!   r   r   
PPPConnectr"   on_connectedon_error)r   cmr   r   r   r3   /   s   zConnection.connect_objresult
_user_datac                    s<   t d|   | dtf fdd}td| d S )NzFailed r   c                      s    j  j dS )NF)r!   
disconnectr"   r   r   r   r   _connect<   s   z%Connection.on_error.<locals>._connecti  )r0   r1   r*   boolr   timeout_add)r   rA   rB   rC   rF   r   rE   r   r>   8   s   
zConnection.on_errorc                 C   sr   d| j d}| | | jjtD ]}|| jj|| qt	d| jjd |d }t
t	d|dd  d S )	Nz/dev/rfcommdzkSuccessfully connected to <b>DUN</b> service on <b>%(0)s.</b>
Network is now available through <b>%(1)s</b>Alias)01	Connectedznetwork-wireless-symbolic)	icon_name)r"   r)   r+   Pluginsget_loaded_pluginsr   r   r!   r   _r
   show)r   rA   rB   rC   
rfcomm_devpluginmsgr   r   r   r=   B   s   
zConnection.on_connected)r   r   r   r   intr   r   r   Errorr6   rG   r3   r   r>   r=   r   r   r   r   r      s    
	
r   c                	   @   s^   e Zd ZdgZedZdZdZdZde	de
egdf d	e
eeejf gdf d
efddZdS )
PPPSupportDBusServicezFProvides basic support for connecting to the internet via DUN profile.Walmiszmodem-symbolicr   r!   replyNr$   r   c                    sF   t tr!dtdd f fdd}j| d td dS dS )	Nr"   r   c                    s$   t tsJ tj|   d S r   )
isinstancer   r   r+   )r"   r$   r[   r   r!   r   r   local_replyX   s   z6PPPSupport.rfcomm_connect_handler.<locals>.local_reply)r)   r*   zConnecting rfcomm deviceTF)r\   r   rV   r3   r0   r1   )r   r!   r[   r$   r^   r   r]   r   rfcomm_connect_handlerU   s   

z!PPPSupport.rfcomm_connect_handler)r   r   r   __depends__rQ   __description__
__author____icon____priority__r   r   r   r   r   r   rW   rG   r_   r   r   r   r   rX   N   s    rX   )!r   rQ   typingr   r   r   _bluemanr   #blueman.services.meta.SerialServicer   blueman.bluez.Devicer   blueman.plugins.AppletPluginr	   blueman.gui.Notificationr
   blueman.main.DBusProxiesr   blueman.main.Configr   gi.repositoryr   r,   r0   "blueman.plugins.applet.DBusServicer   blueman.servicesr   blueman.main.Appletr   r   r   rX   r   r   r   r   <module>   s&    0