
    l
j-                        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	 d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZmZmZmZ e j                   Z G d dej*                        Z G d de      Z G d	 d
e      Z G d de      Zy)    N)Path)GObjectGLibGioGtkGdk)OpStatus	OpCommandTransferDirectionReceiveErrorc                       e Zd Zej                  j
                  ddfej                  j
                  ddfej                  j
                  deffej                  j
                  ddfej                  j
                  ddfej                  j
                  ddfdZd fd	Zd Z	d Z
d ZddZej                  d	        Zej                  d
        Zd Zd Z xZS )CommonOpN )status-changedinitial-setup-complete
op-commandprogress-changedactivefocusc                 v   t         t        |           || _        || _        || _        t        j                  | _        t        j                         | _        d| _        d| _        d| _        d| _        d| _        d | _        d| _        t'        j(                  | j$                        | _        d| _        d | _        y )Nr    zapplication/octet-stream)superr   __init__urissender	directionr	   INITstatusr   get_monotonic_time
start_time
total_sizetotal_countremaining_countsize_stringdescriptionname_if_singlemime_if_singler   content_type_get_symbolic_icongicon	error_msgprogress_tracker)selfr   r   r   	__class__s       /usr/libexec/warpinator/ops.pyr   zCommonOp.__init__   s    h&(	"mm113 "8778K8KL
 $    c                 `   || _         t        d      t        j                  |j                        t        j                  |j                        dz  |_        |j                  dk(  r&t        j                  | _        | j                          y | j                  d       | j                  d       y )Nz#%(time_left)s (%(bytes_per_sec)s/s))	time_leftbytes_per_secg      ?r   r   )current_progress_report_utilformat_time_spantime_left_secr   format_sizer2   progress_textprogressr	   FINISHEDr   emit_status_changedemit)r,   reports     r.   progress_reportzCommonOp.progress_report3   s    '-$ !FG6:6K6KFL`L`6a:>:J:J6K_K_:`'' ( ??c!"++DK$$&		(		$%r/   c                 N    	 | j                   j                  S # t        $ r Y yw xY wNr   )r3   r9   AttributeErrorr,   s    r.   get_progress_textzCommonOp.get_progress_textC   s+    	//=== 		    	$$c                 N    	 | j                   j                  S # t        $ r Y yw xY w)Nr   )r3   r:   rB   rC   s    r.   get_progresszCommonOp.get_progressI   s+    	//888 		rE   c                 2   |d| _         y t        |t        j                        r|j                  | _         y t        |t
        j                        r|j                         | _         y t        |t              rt        |      | _         y t        |      | _         y rA   )
r*   
isinstancer   ErrormessagegrpcRpcErrordetailsr   str)r,   es     r.   	set_errorzCommonOp.set_errorO   se    9DNa$YYDN4==)YY[DN<( VDN VDNr/   c                 &    | j                  d       y )Nr   r=   rC   s    r.   emit_initial_setup_completez$CommonOp.emit_initial_setup_complete]   s    		*+r/   c                 &    | j                  d       y )Nr   rS   rC   s    r.   r<   zCommonOp.emit_status_changeda   s    		"#r/   c                      y Nr   r,   r   s     r.   
set_statuszCommonOp.set_statuse       r/   c                 &    | j                  d       y )Nr   rS   rC   s    r.   r   zCommonOp.focush   s    		'r/   rW   )__name__
__module____qualname__r   SignalFlagsRUN_LASTint__gsignals__r   r?   rD   rG   rQ   misc_idlerT   r<   rY   r   __classcell__r-   s   @r.   r   r      s    "..77rB#*#6#6#?#?r"J**33TC6B$00994D&&//r:%%..b9L%,& $ 
ZZ, , 
ZZ$ $r/   r   c                   P     e Zd Zd
 fd	Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )SendOpc                     t         t        |   t        j                  ||       || _        t        j                         | _        || _	        d| _
        g | _        d | _        d | _        d | _        g | _        y NF)r   rh   r   r   TO_REMOTE_MACHINEreceiverr   get_real_namesender_namereceiver_namedbus_opresolved_filesfirst_missing_filefile_send_cancellabler3   top_dir_basenames)r,   r   rl   ro   r   r-   s        r.   r   zSendOp.__init__l   so    fd$%6%H%H&RVW --/* "&%)"'+$
 "$r/   c                 n   || _         |t        j                  k(  rt        j                  | d       ns|t        j
                  t        j                  t        j                  fv rt        j                  | d       n*|t        j                  k(  rt        j                  | d       | j                          y )NTr   )r   r	   r;   notificationsTransferCompleteNotificationFAILED_UNRECOVERABLEFAILEDFILE_NOT_FOUNDTransferFailedNotificationSTOPPED_BY_RECEIVERTransferStoppedNotificationr<   rX   s     r.   rY   zSendOp.set_status~   s    X&&&66tDI55xH_H_``44T$Gx33355d4H  "r/   c                     t         j                  | _        | j                          t	        j
                  |       }| j                  |       y rW   )r	   CALCULATINGr   r<   	transfersgather_file_infoupdate_ui_infor,   errors     r.   prepare_send_infozSendOp.prepare_send_info   s9    **  "**40E"r/   c                    |t        j                  | j                        | _        t	        j
                  d| j                  | j                  fz         | j                  dkD  rYt        j                  dd| j                        | j                  fz  | _	        t        j                  j                  d      | _        nB| j                  d   j                  | _	        t        j                   | j"                        | _        | j%                  t&        j(                         nt+        |t         j,                        r|j.                  t        j0                  j2                  k(  rgd| _	        d| _        	 | j6                  d   | _        t        j                  j                  d      | _        | j%                  t&        j<                         n7d| _	        | j?                  |       | j%                  t&        j@                         | jB                  r2| jD                  t&        j(                  k(  rtG        jH                  |        | jK                          | jM                          y # t:        $ r
 d | _        Y w xY w)	Nz*Op: calculated %d files, with a size of %s   z%d file-do-not-translate%d filesxsi-edit-copy-symbolicr   r   zxsi-dialog-error-symbolic)'r   r8   r!   r$   loggingdebugr"   gettextngettextr%   r   
ThemedIconnewr)   rq   basenamer(   r'   rY   r	   WAITING_PERMISSIONrI   rJ   codeIOErrorEnum	NOT_FOUNDr*   rt   rr   
IndexErrorr{   rQ   ry   rp   r   rw   WarpinatorSendNotificationrT   r<   r   s     r.   r   zSendOp.update_ui_info   s   =#//@DMMF$JZJZ\`\l\lImmn!##*#3#34N4>@P@P$RUYUeUeTg$h  ^^//0HI
#'#6#6q#9#B#B  ??@S@ST
OOH778%,s?X?X1X#% !#3.2.D.DQ.GD+ !^^//0KL
 7 78 $& u% = =><<DKK8+F+FF44T:((*  " " 3.2D+3s   0I I10I1c                 D    | j                  dt        j                         y Nr   )r=   r
   CANCEL_PERMISSION_BY_SENDERrC   s    r.   cancel_transfer_requestzSendOp.cancel_transfer_request   s    		,	 E EFr/   c                 D    | j                  dt        j                         y r   r=   r
   RETRY_TRANSFERrC   s    r.   retry_transferzSendOp.retry_transfer       		,	 8 89r/   c                      y rW   r   rC   s    r.   pause_transferzSendOp.pause_transfer   rZ   r/   c                 D    | j                  dt        j                         y r   )r=   r
   STOP_TRANSFER_BY_SENDERrC   s    r.   stop_transferzSendOp.stop_transfer   s    		,	 A ABr/   c                 D    | j                  dt        j                         y r   r=   r
   REMOVE_TRANSFERrC   s    r.   remove_transferzSendOp.remove_transfer       		,	 9 9:r/   )NNNN)r\   r]   r^   r   rY   r   r   r   r   r   r   r   re   rf   s   @r.   rh   rh   k   s3    $$##$#PG:C;r/   rh   c                   H     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 xZS )		ReceiveOpc                     t         t        |   t        j                  |       | j
                  | _        t        j                         | _	        d| _
        d| _        d | _        d | _        g | _        y rj   )r   r   r   r   FROM_REMOTE_MACHINEr   rn   r   rm   ro   
have_spaceexistingfile_iteratorr3   rt   )r,   r   r-   s     r.   r   zReceiveOp.__init__   sd    i'(9(M(MvV;;!//1   "'+$ "$r/   c                    || _         |t        j                  k(  rt        j                  | d       n|t        j
                  k(  rt        j                  | dd       nd|t        j                  t        j                  fv rt        j                  | d       n*|t        j                  k(  rt        j                  | d       | j                          y )NFrv   T)r   warn)r   r	   r;   rw   rx   FINISHED_WARNINGry   rz   r|   STOPPED_BY_SENDERr~   r<   rX   s     r.   rY   zReceiveOp.set_status   s    X&&&66tEJx00066tEPTU55xGG44T%Hx11155d5I  "r/   c                 j   t        j                  | j                        | _        t	        j
                  d| j                  | j                  fz         | j                  D ]  }	 t        j                  |        t        j                   j#                  | j                  | j                        | _        t        j&                  | j                        | _        | j+                          y # t        $ rA}| j                  |       t        j                  | _        | j                          Y d }~ y d }~ww xY w)Nz(Op: details: %d files, with a size of %s)r   r8   r!   r$   r   r   r"   rt   r5   test_resolved_path_safetyr   rQ   r	   ry   r   rT   free_space_monitorhave_enough_freer   files_existr   r   )r,   top_dirrP   s      r.   prepare_receive_infozReceiveOp.prepare_receive_info   s    ++DOO<@DDTDTVZVfVfCggh -- 	G..w7	 11BB4??TXTjTjk(()?)?@   q!&;;002	s   #C((	D216D--D2c                    | j                   dkD  rYt        j                  dd| j                         | j                   fz  | _        t        j
                  j                  d      | _        n5| j                  | _        t	        j                  | j                        | _        t        j                  | _        t        j                  |        | j!                          y )Nr   z%d filer   r   )r"   r   r   r%   r   r   r   r)   r&   r(   r'   r	   r   r   rw   NewOpUserNotificationrT   rC   s    r.   r   zReceiveOp.update_ui_info  s    a&//	0:D<L<L NQUQaQaPc dD++,DEDJ#22D;;D<O<OPDJ11++D1((*r/   c                 D    | j                  dt        j                         y r   )r=   r
   START_TRANSFERrC   s    r.   accept_transferzReceiveOp.accept_transfer  r   r/   c                 D    | j                  dt        j                         y r   )r=   r
   CANCEL_PERMISSION_BY_RECEIVERrC   s    r.   decline_transfer_requestz"ReceiveOp.decline_transfer_request  s    		,	 G GHr/   c                 D    | j                  dt        j                         y r   )r=   r
   STOP_TRANSFER_BY_RECEIVERrC   s    r.   r   zReceiveOp.stop_transfer  s    		,	 C CDr/   c                 D    | j                  dt        j                         y r   r   rC   s    r.   r   zReceiveOp.remove_transfer  r   r/   )r\   r]   r^   r   rY   r   r   r   r   r   r   re   rf   s   @r.   r   r      s-    $(#&+ :IE;r/   r   c                   :     e Zd ZdZ fdZd Zd Zd Zd Z xZ	S )TextMessageOpNc                     t         t        |   ||       t        j                  j                  d      | _        t        d      | _        y )Nzxsi-mail-message-new-symboliczText message)	r   r   r   r   r   r   r)   r4   r%   )r,   r   r   r-   s      r.   r   zTextMessageOp.__init__!  s8    mT+Iv>^^''(GH
^,r/   c                     t         j                  j                  t        j                        }|j                  | j                  d       y )N)r   	Clipboardgetr   SELECTION_CLIPBOARDset_textrK   )r,   cbs     r.   copy_messagezTextMessageOp.copy_message&  s.    ]]s667
DLL"%r/   c                 .    t        j                  |        y rW   )rw   TextMessageNotificationrC   s    r.   send_notificationzTextMessageOp.send_notification*  s    --d3r/   c                 D    | j                  dt        j                         y r   r   rC   s    r.   r   zTextMessageOp.remove_transfer-  r   r/   c                 D    | j                  dt        j                         y r   r   rC   s    r.   r   zTextMessageOp.retry_transfer0  r   r/   )
r\   r]   r^   rK   r   r   r   r   r   re   rf   s   @r.   r   r     s!    G-
&4;:r/   r   )r   r   pathlibr   gi.repositoryr   r   r   r   r   rL   r   prefsrc   r5   rw   r	   r
   r   r   r4   Objectr   rh   r   r   r   r/   r.   <module>r      st       6 6       E EOOUw~~ Un];X ];@Q; Q;f:H :r/   