
    |~g6                        d dl m Z  d dlmZmZ d dlZd dlZd dlZd dlmZ d dl	m
Z
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mZmZ d dlm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z( erd dl)m*Z*  G d de*      Z+ G d de*      Z,eeef   Z- G d de#      Z. G d de#      Z/ G d de"      Z0 G d de%      Z1y)    )datetime)gettextngettextN)escape)ListDictTYPE_CHECKINGCallableTupleOptionalUnion)AgentManager)Manager)Transfer)Session)launch)Notification_NotificationBubble_NotificationDialog)BluemanApplet)DbusService	DbusError)AppletPlugin)GLibGio)	TypedDictc                   2    e Zd ZU eed<   ee   ed<   eed<   y)TransferDictpathsizenameN__name__
__module____qualname__str__annotations__r   int     H/usr/lib/python3/dist-packages/blueman/plugins/applet/TransferService.pyr   r      s    	sm	r*   r   c                   P    e Zd ZU eed<   eed<   eed<   eed<   ee   ed<   eed<   y)PendingTransferDicttransfer_pathaddressrootfilenamer    r!   Nr"   r)   r*   r+   r-   r-      s&    	sm	r*   r-   c                       e Zd ZdZy)ObexErrorRejectedzorg.bluez.obex.Error.RejectedNr#   r$   r%   _namer)   r*   r+   r3   r3   (       +Er*   r3   c                       e Zd ZdZy)ObexErrorCanceledzorg.bluez.obex.Error.CanceledNr4   r)   r*   r+   r8   r8   ,   r6   r*   r8   c                   x     e Zd ZdZdef fdZddZddZddZd	e	d
e
e	gdf   de
egdf   ddfdZddZ xZS )Agentz/org/bluez/obex/agent/bluemanappletc                    t         |   d d| j                  t        j                  j
                         | j                  ddd| j                         | j                  ddd| j                         | j                  ddd| j                  d	
       | j                          || _        t        j                  d      | _        g | _        d | _        d | _        i | _        y )Nzorg.bluez.obex.Agent1Releaser)    CancelAuthorizePush)osT)is_asyncorg.blueman.transfer	schema_id)super__init___Agent__agent_pathr   BusTypeSESSION
add_method_release_cancel_authorize_pushregister_appletSettings_config_allowed_devices_notification_pending_transfer	transfers)selfr;   	__class__s     r+   rH   zAgent.__init__3   s    68I8I3;;K^K^_	2r4==9"b$,,7d6J6JUYZ||.DE+-9=BF46r*   returnNc                 J    t               j                  | j                         y N)r   register_agentrI   rX   s    r+   register_at_managerzAgent.register_at_managerC   s    %%d&7&78r*   c                 J    t               j                  | j                         y r\   )r   unregister_agentrI   r^   s    r+   unregister_from_managerzAgent.unregister_from_managerF   s    ''(9(9:r*   c                 2    t        | j                  dz         )Nz was released unexpectedly)	ExceptionrI   r^   s    r+   rM   zAgent._releaseI   s    )),HHIIr*   r.   okerrc           
      F    dt         dd f fd}t        |      }t        |j                        }|j                  }|j
                  }|j                  }	|j                  }
	  j                  j                  j                         } j                  j                  j                  ||j                               }|J |j                  }|d   }||||	|
|d _        | j$                  vr j&                  d   r|swt)        t+        d	      t+        d
      dt-        |	      z   dz   dt-        |      z   dz   dz  ddt+        d      fdt+        d      fg|d      x _        }|j1                          y |
ri|
dkD  rdt)        t+        d      t+        d      dt-        |	      z   dz   dt-        |      z   dz   dz  d      x _        } |d       |j1                          y d  _         |d       y # t        $ r$}t        j                   |       |}d}Y d }~Gd }~ww xY w)NactionrZ   c                 L   t        j                  d|         | dk(  rj                  sJ j                  d   dz   t        j                  j                  j                  d         z   j                  d   j                  d   dj                  j                  d	   <    j                  j                  d	      d
          j                  j                  j                  d          dt        ffd}t        j                  d|       y  t        d             y )NzAction acceptr0   /r1   r    r!   )r   r    r!   r.   r   r/   rZ   c                  r     j                   J  j                  j                   j                   d          y)Nr/   F)rV   rT   remover^   s   r+   _removez9Agent._authorize_push.<locals>.on_action.<locals>._remove]   s7    11===))001G1G	1RS r*   i`  Rejected)logginginforV   osr   basenamerW   rT   appendboolr   timeout_addr3   )rh   rn   rf   re   rX   s     r+   	on_actionz(Agent._authorize_push.<locals>.on_actionN   s   LL76(+,!---- 226:S@277CSCSTXTjTjkuTvCww 226: 226:Kt55oFG 4>>$"8"8"IJ6RS%%,,T-C-CI-NO! !
   0%j12r*   )obj_pathTrustedF)r.   r/   r0   r1   r    r!   z
opp-acceptzIncoming file over BluetoothzIncoming file %(0)s from %(1)s<b></b>010u  rj   AcceptrejectRejectblueman	icon_name0W zReceiving filezReceiving file %(0)s from %(1)s)r&   r   r   sessionr0   r/   r!   r    rQ   r   get_adapterfind_deviceget_object_pathdisplay_namerd   rp   	exceptionrV   rT   rS   r   _r   rU   show)rX   r.   re   rf   rw   transferr   r0   r/   r1   r    adapterdevicer!   trustedenotifications   ` ``             r+   rO   zAgent._authorize_pushL   s-   	3c 	3d 	30 ]38#3#34||//==}}		ll**668G\\))55gw?V?V?XYF%%%&&DY'G 4AW^b.6d"T $///l9SX_0<0123EF8DT<TW]<]<AF4L<PSY<Y7[ [1X;/(AhK1HI9#1 D dVm0<"#34UVHEU=UX^=^=BVD\=QTZ=Z8\ \#	1 D h "&Dh?  	a DG	s   'A-G3 3	H <HH c                 d    | j                   r| j                   j                          t        d      )NCanceled)rU   closer8   r^   s    r+   rN   zAgent._cancel   s(    $$&
++r*   rZ   N)r#   r$   r%   rI   r   rH   r_   rb   rM   r&   r
   r3   rO   rN   __classcell__)rY   s   @r+   r:   r:   0   sk    2L7} 7 9;JF S F hud{6K F %'8&94&?@F EIF P,r*   r:   c                   4   e Zd ZU dZ ed      ZdZdZdZdZ	dZ
dZdZg Zee   ed<   ddZdd	Zdeeef   fd
ZddZddZdej4                  dededdfdZdej4                  deddfdZdededdfdZdedededdfdZ dedededdfdZ!dededdfdZ"y)TransferServicecschrammz(Provides OBEX file transfer capabilitieszblueman-send-symbolicr   N_handleridsrZ   c                     dt         dd f fd}t        j                  d       _         j	                         \  }}|rYt        d      }t        d      }t        || j                  d   |fz  d	d
dg|       _         j                  j                          t        j                   j                   j                         _        y )N_actionrZ   c                 t    d _         j                  j                  d       t        j                  d       y )Nshared-pathzReset share path)rU   rS   resetrp   rq   )r   rX   s    r+   on_resetz)TransferService.on_load.<locals>.on_reset   s*    !%DLL}-LL+,r*   rD   rE   z6Configured directory for incoming files does not existzPlease make sure that directory "<b>%s</b>" exists or configure it with blueman-services. Until then the default "%s" will be usedr   r   r   )r   zReset to default)r   timeoutactions
actions_cb)r&   r   rR   rS   _make_share_pathr   r   rU   r   r   watch_name_owner_on_dbus_name_appeared_on_dbus_name_vanished_watch)rX   r   
share_pathinvalid_share_pathtextsecondary_texts   `     r+   on_loadzTransferService.on_load   s    	-c 	-d 	-
 ||.DE)-)>)>)@&
&MND  n oN!-dNdllS`FacmEn4n8A57T6Ubj"lD ##%..t/J/JDLgLghr*   c                 z    | j                   rt        j                  | j                          | j                          y r\   )r   r   bus_unwatch_name_unregister_agentr^   s    r+   	on_unloadzTransferService.on_unload   s'    ;;  - r*   c                    | j                   d   }t        j                  t        j                  j                        }d }d}|dk(  r|}n>t
        j                  j                  |      s|}d}t        j                  d|        n|}|s4t
        j                  j                  d      }t        j                  d       ||k(  r$t        j                  d       d| j                   d<   ||fS )	Nr   Fr>   TzInvalid shared-path ~z#Failed to get Download dir from XDGz-Reset stored path, identical to default path.)rS   r   get_user_special_dirUserDirectoryDIRECTORY_DOWNLOADrr   r   isdirrp   warning
expanduserrq   )rX   config_pathdefault_pathr   errors        r+   r   z TransferService._make_share_path   s    ll=1001C1C1V1VW"D{+DEOO2;-@AD77%%c*DOOAB ,&LLHI*,DLL'U{r*   c                     | j                   st        | j                        | _         | j                   j                          y r\   )_agentr:   parentr_   r^   s    r+   _register_agentzTransferService._register_agent   s)    {{,DK'')r*   c                     | j                   r<| j                   j                          | j                   j                          d | _         y y r\   )r   rb   
unregisterr^   s    r+   r   z!TransferService._unregister_agent   s5    ;;KK//1KK""$DK r*   _connectionr!   ownerc                    t        j                  | d|        t               | _        | j                  j                  | j                  j                  d| j                               | j                  j                  | j                  j                  d| j                               | j                  j                  | j                  j                  d| j                               | j                          y )N ztransfer-startedztransfer-completedzsession-removed)rp   rq   r   _managerr   rt   connect_on_transfer_started_on_transfer_completed_on_session_removedr   )rX   r   r!   r   s       r+   r   z&TransferService._on_dbus_name_appeared   s    vQug&'	 5 56H$JcJc de 5 56JDLgLg hi 5 56GIaIa bcr*   c                    t        j                  | d       | j                  r:| j                  D ]  }| j                  j	                  |        d | _        g | _        | j
                  r"| j
                  j                          d | _        y y )Nz not running or was stopped)rp   rq   r   r   
disconnectr   r   )rX   r   r!   sigids       r+   r   z&TransferService._on_dbus_name_vanished   sv    v89:==)) 0((/0 DM!D;;KK""$DK r*   r   r.   c                     | j                   r|| j                   j                  vry | j                   j                  |   d   }|J |dkD  r| xj                  dz  c_        y | xj                  dz  c_        y )Nr    r      )r   rW   _normal_transfers_silent_transfers)rX   r   r.   r    s       r+   r   z$TransferService._on_transfer_started   sk    {{m4;;3H3HH{{$$]3F;&=""a'"""a'"r*   nr   c                      |j                   r8t        j                  d       dt        dd f fd}|j	                  d||       y y )Nzadding actionr   rZ   c                 \    d _         t        j                  d       t        dgd       y )Nopenzxdg-openT)pathssystem)rU   rp   rq   r   )r   r   rX   s    r+   on_openz*TransferService._add_open.<locals>.on_open  s%    %)"V$z$=r*   r   )actions_supportedrp   rq   r&   
add_action)rX   r   r!   r   r   s   `  ` r+   	_add_openzTransferService._add_open  sB    LL)> > >
 LLw/ r*   successc           
         | j                   r|| j                   j                  vrt        j                  d       y | j                   j                  |   }|d   }| j	                         \  }}t
        j                  j                  |      }t
        j                  j                  ||      }	t
        j                  j                  |	      rBt        j                         }
|
j                  d       d| }t        j                  d|        	 t        j                  ||	       |rt%        t'        d
      t'        d      dt)        |      z   dz   dt)        |d         z   dz   dz  d      | _        | j-                  | j*                  t'        d      |	       | j*                  j/                          n|st%        t'        d      t'        d      dt)        |      z   dz   dt)        |d         z   dz   dz  d      }|j/                          |d   J |d   dkD  r| xj0                  dz  c_        n| xj2                  dz  c_        | j                   j                  |= y # t        t         f$ r t        j"                  dd       d	}Y ew xY w)Nz7This is probably not an incoming transfer we authorizedr   z%Y%m%d%H%M%Sr   z&Destination file exists, renaming to: zFailed to move filesT)exc_infoFzFile receivedz+File %(0)s from %(1)s successfully receivedrz   r{   r!   r|   r   r   OpenzTransfer failedzTransfer of file %(0)s failedr    r   r   )r   rW   rp   rq   r   rr   r   rs   joinexistsr   nowstrftimeshutilmoveOSErrorPermissionErrorr   r   r   r   rU   r   r   r   r   )rX   r   r.   r   
attributessrcdest_dirignoredr1   destr   r   s               r+   r   z&TransferService._on_transfer_completed  sO   {{m4;;3H3HHLLRS[[**=9
  113'77##C(ww||Hh/77>>$,,.C,,~67q
CHLLA(LM	KKT"
 !-a.@./0].^7<vh?O7ORX7X7<vjQWFX?Y7Y\b7bbd /d 9B	"CD
 NN4--qy$?##%#$12!11F:
6(:!;;fD6F F $A FFHf%111&!F*&&!+&&&!+&KK!!-07 ) 	MM04@G	s   I (J	J	_session_pathc                 j   | j                   dk(  ry | j                         \  }}| j                  dk(  rt        t	        d      t        dd| j                         d| j                   iz  d      | _        | j                  | j                  t	        d      |       | j                  j                          y t        t	        d      t        d	d
| j                         d| j                   iz  d      | _        | j                  | j                  t	        d      |       | j                  j                          y )Nr   zFiles receivedz)Received %(files)d file in the backgroundz*Received %(files)d files in the backgroundfilesr   r   zOpen Locationz.Received %(files)d more file in the backgroundz/Received %(files)d more files in the background)	r   r   r   r   r   r   rU   r   r   )rX   r   r   r   r   s        r+   r   z#TransferService._on_session_removedF  s$   !!Q&"335
G!!Q&!-a0@.A.67b7c7;7M7M/ORY[_[q[qQr/s 9B	"CD NN4--q/A:N##%!-a0@.A.67g7h7;7M7M/ORY[_[q[qQr/s 9B	"CD
 NN4--q/A:N##%r*   r   )#r#   r$   r%   
__author__r   __description____icon__r   r   r   r   r   rU   r   r   r(   r'   r   r   r   r&   ru   r   r   r   r   DBusConnectionr   r   r   r   NotificationTyper   r   r   r)   r*   r+   r   r      s3   JBCO&HHFFMKci*!%T	"2 4*
#2D2D C X[ `d #2D2D C TX 
(W 
(S 
(T 
(	0+ 	03 	0c 	0d 	0.1w .1s .1UY .1^b .1`&G &C &D &r*   r   )2r   r   r   r   rr   r   rp   htmlr   typingr   r   r	   r
   r   r   r   blueman.bluez.obex.AgentManagerr   blueman.bluez.obex.Managerr   blueman.bluez.obex.Transferr   blueman.bluez.obex.Sessionr   blueman.Functionsr   blueman.gui.Notificationr   r   r   blueman.main.Appletr   blueman.main.DbusServicer   r   blueman.plugins.AppletPluginr   gi.repositoryr   r   typing_extensionsr   r   r-   r   r3   r8   r:   r   r)   r*   r+   <module>r     s     * 	    N N N 8 . 0 . $ [ [ - ; 5 #+y 
i  ,.AAB ,	 ,,	 ,g,K g,TA&l A&r*   