
    l
jK1                    6   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Zd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlZd dlZd dlZd dlZ ej"                  dd        ej"                  dd       d dlmZmZ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 Z d dl!Z!d dl"m#Z#m$Z$m%Z% d d	lm&Z&m'Z'm(Z( d
Z)	 ejT                    ejV                  ejX                  ejZ                          ejV                  ejX                  ejZ                          ej\                  ejX                         ej                  Z/ ej                  d       dZ0dZ1dZ2dZ3dZ4dZ5dZ6e'jn                  e'jp                  fZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCeCZDdZEdZFdZGeGZHeGZIdZJdZK G d deL      ZM G d  d!ej                        ZO G d" d#ej                        ZP G d$ d%ej                        ZR G d& d'ej                        ZTd*d(ZUeVd)k(  r ej                   eU              yy#  dZ)Y ZxY w)+    N)BytesIOGtkz3.0XAppz1.0)r   GLibr   GioGObjectGdk	GdkPixbuf)SendOp	ReceiveOpTextMessageOp)TransferDirectionOpStatusRemoteStatusTF
warpinator   
      i   zxsi-network-offline-symboliczxsi-network-error-symbolic)
transfer_accepttransfer_declinetransfer_cancel_requesttransfer_restarttransfer_pausetransfer_resumetransfer_stoptransfer_removetransfer_open_foldertransfer_copy_message )r   )r   r   )r   )r   r   )r   r   )r   )r   r   )r   r   c                   r     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Z xZS )OpItemc                    t         t        |           || _        t        j
                  j                  t        j                  j                  t        j                  d            | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d	      | _        | j                  j                  d
      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  d      | _         | j0                  jC                  d| jD                         | j2                  jC                  d| jF                         | j4                  jC                  d| jH                         | j6                  jC                  d| jJ                         | j8                  jC                  d| jL                         | j:                  jC                  d| jN                         | j<                  jC                  d| jP                         | j>                  jC                  d| jR                         | j@                  jC                  d| jT                         | j                  jC                  d| jV                         | jY                          | j[                          y )Nz
op-item.uiop_itemtransfer_direction_imagetransfer_mime_imagetransfer_description_labeltransfer_size_labelop_status_stackop_transfer_status_messageop_transfer_problem_labelop_transfer_text_messageop_transfer_progress_barr   r   r   r   r   r   r   r   r   clickedzprogress-changed).superr"   __init__opr   Buildernew_from_fileospathjoinconfig
pkgdatadirbuilder
get_objectitemdirection_image
mime_imager'   r(   r)   r*   r+   r,   op_progress_baraccept_buttondecline_buttoncancel_buttonrestart_buttonpause_buttonstop_buttonremove_buttonfolder_buttoncopy_buttonconnectaccept_button_clickeddecline_button_clickedcancel_button_clickedrestart_button_clickedpause_button_clickedstop_button_clickedremove_button_clickedfolder_button_clickedcopy_button_clickedupdate_progressrefresh_status_widgetsrefresh_buttons_and_icons)selfr1   	__class__s     %/usr/libexec/warpinator/warpinator.pyr0   zOpItem.__init__^   s4   fd$&{{00f>O>OQ]1^_LL++I6	#||667QR,,112GH*.,,*A*AB^*_'#'<<#:#:;P#Q #||667HI*.,,*A*AB^*_')-)@)@A\)]&(,(?(?@Z([%#||667QR"ll556GH#||667IJ"ll556OP#||667IJ!\\445EF LL33OD"ll556GH"ll556LM<<223JK""9d.H.HI##It/J/JK""9d.H.HI##It/J/JK!!)T-F-FG  D,D,DE""9d.H.HI""9d.H.HI  D,D,DE*D,@,@A##%&&(    c                     | j                   j                  | j                  j                                | j                   j	                  | j                  j                                y N)r>   set_fractionr1   get_progressset_textget_progress_text)rU   r1   s     rW   rR   zOpItem.update_progress   sD    ))$''*>*>*@A%%dgg&?&?&ABrX   c                     t         D ],  }d| j                  j                  |      j                  _        . |D ],  }d| j                  j                  |      j                  _        . y NFT)ALL_BUTTONSr9   r:   propsvisible)rU   vis_buttonsnames      rW   set_visible_buttonszOpItem.set_visible_buttons   s\     	@D:?DLL##D)//7	@ 	?D:>DLL##D)//7	?rX   c                    | j                   j                          | j                  j                  | j                  j
                         | j                  j                  t        j                  k(  rg| j                  j                  | j                  j                                | j                  j                  | j                  j                                nK| j                  j                  t        j                  k(  r$| j                  j                  t        d             | j                  j                  t        j                   k(  r0| j                  j"                  t$        j&                  k(  r%| j(                  j                  t        d             y | j(                  j                  t        d             | j                  j*                  s?| j                   j-                          | j                   j                  t        d             y | j                  j.                  rTt1        j2                         r?| j                   j-                          | j                   j                  t        d             y y y | j                  j                  t        j4                  k(  rt7        | j                  t8              sA| j                  j                  t        j:                  k(  r?t7        | j                  t<              r%| j(                  j                  t        d             y | j                  j                  t        j4                  k(  rVt7        | j                  t<              r<| j(                  j                  t        d      | j                  j>                  z         y | j                  j                  t        j:                  k(  rVt7        | j                  t8              r<| j(                  j                  t        d      | j                  j@                  z         y | j                  j                  t        jB                  k(  rt7        | j                  t8              sA| j                  j                  t        jD                  k(  r?t7        | j                  t<              r%| j(                  j                  t        d             y | j                  j                  t        jB                  k(  rVt7        | j                  t<              r<| j(                  j                  t        d	      | j                  j>                  z         y | j                  j                  t        jD                  k(  rVt7        | j                  t8              r<| j(                  j                  t        d	      | j                  j@                  z         y | j                  j                  t        jF                  t        jH                  fv r%| j(                  j                  t        d
             y | j                  j                  t        jJ                  k(  r| j                   j-                          | j(                  j                  t        d
             | j                  jL                  <| j                   j                  t        d      | j                  jL                  z         y | j                   j                  t        d             y | j                  j                  t        jN                  k(  rt7        | j                  tP              rd}| j                  jR                  jU                  d      }tW        tY        |            D ]<  }|||    z  }|dk(  rtY        |      dkD  r|dz  } n|dz   tY        |      k  s8|dz  }> t[        j\                  |      }d}d }t_        j`                  |||      }| jb                  je                  |       y | j(                  j                  t        d             y | j                  j                  t        jf                  k(  r%| j(                  j                  t        d             y y )NPausedzWaiting for approvalzWaiting for your approvalzNot enough disk spacezFiles may be overwrittenzRequest cancelledzRequest cancelled by %szTransfer cancelledzTransfer cancelled by %szTransfer failedzFile '%s' not foundzSome files not foundr   
r      z...   z9(https?://[^\s<>"{}|\\^`\[\]]+|www\.[^\s<>"{}|\\^`\[\]]+)c                 f    | j                  d      }|j                  d      r|nd| }d| d| dS )Nr   httpzhttps://z	<a href="z">z</a>)group
startswith)matchurlhrefs      rW   replace_urlz2OpItem.refresh_status_widgets.<locals>.replace_url   s=    ++a.C"%.."83>ND&tfBse488rX   	CompletedzCompleted, but with errors)4r+   hider;   set_tooltip_textr1   	error_msgstatusr   TRANSFERRINGr>   r[   r\   r]   r^   PAUSED_WAITING_PERMISSION	directionr   TO_REMOTE_MACHINEr*   
have_spaceshowexistingprefsprevent_overwritingCANCELLED_PERMISSION_BY_SENDER
isinstancer    CANCELLED_PERMISSION_BY_RECEIVERr   sender_namereceiver_nameSTOPPED_BY_SENDERSTOPPED_BY_RECEIVERFAILEDFAILED_UNRECOVERABLEFILE_NOT_FOUNDfirst_missing_fileFINISHEDr   messagesplitrangelenhtmlescaperesubr,   
set_markupFINISHED_WARNING)rU   labellinesiurl_patternrs   markups          rW   rS   zOpItem.refresh_status_widgets   s   &&++-		""477#4#4577>>X222  --dgg.B.B.DE  ))$''*C*C*EFWW^^x.  ))!H+677>>X888ww  $5$G$GG//88;Q9RS//88;V9WXww))2277922;;A>U<VWWW%%%*C*C*E2277922;;A>X<YZ +F% ggnn G GGJW[W^W^`fLgWW^^xHHHZX\X_X_ajMk++44Q7J5KLggnn G GGJW[W^W^`iLj++44Q7P5QTXT[T[TgTg5ghggnn I IIjY]Y`Y`bhNi++44Q7P5QTXT[T[TiTi5ijggnn : ::z$''SY?ZWW^^x;;;
477T]@^++44Q7K5LMggnn : ::z$''S\?]++44Q7Q5RUYU\U\UhUh5higgnn < <<DGGU[A\++44Q7Q5RUYU\U\UjUj5jkWW^^1N1NOO++44Q7H5IJWW^^x666**//1++44Q7H5IJww))5..77:O8PSWSZSZSmSm8mn..77:P8QRWW^^x000$''=1--d3s5z* *Aaz*EAv#e*q.q53u:-!TME* E*Z9 [%@--88@//88;HWW^^x888++44Q7S5TU 9rX   c                    | j                   j                  t        j                  k(  r5| j                  j                  dt        j                  j                         n4| j                  j                  dt        j                  j                         | j                   j                  t        j                  k(  r| j                  j                          nH| j                  j                  | j                   j                  t        j                  j                         | j                   j#                  | j                   j$                         | j                   j'                  t)        | j                   t*                      | j,                  j#                  | j                   j.                         | j,                  j'                  t)        | j                   t*                      | j                   j                  t        j0                  t        j                  fv r1| j2                  j5                  d       | j7                  t8               y | j                   j                  t        j:                  k(  rn| j2                  j5                  d       | j                   j                  t        j                  k(  r| j7                  t<               y | j7                  t>               y | j                   j                  t        j@                  k(  rn| j2                  j5                  d       | j                   j                  t        j                  k(  r| j7                  tB               y | j7                  tD               y | j                   j                  t        jF                  k(  rn| j2                  j5                  d       | j                   j                  t        j                  k(  r| j7                  tH               y | j7                  tJ               y | j                   j                  t        jL                  k(  rn| j                   j                  t        j                  k(  r| j7                  tN               n| j7                  tP               | j2                  j5                  d       y | j                   j                  t        jR                  k(  r1| j7                  tT               | j2                  j5                  d       y | j                   j                  t        jV                  k(  r1| j2                  j5                  d       | j7                  tX               y | j                   j                  t        jZ                  t        j\                  fv rt)        | j                   t*              r1| j2                  j5                  d       | j7                  t^               y | j2                  j5                  d       t)        | j                   t`              r| j7                  tb               y | j7                  td               y | j                   j                  t        jf                  t        jh                  fv r| j7                  tj               y | j                   j                  t        jl                  k(  rKt)        | j                   t`              r1| j2                  j5                  d       | j7                  tn               y | j                   j                  t        jl                  t        jp                  fv r1| j2                  j5                  d       | j7                  tr               y y )Nzxsi-go-up-symboliczxsi-go-down-symboliccalculatingr   zprogress-barztext-message):r1   r}   r   r~   r<   set_from_icon_namer   IconSizeBUTTONrx   r   CALCULATINGr=   clearset_from_gicongiconr(   r]   size_stringset_visibler   r   r'   descriptionINITr)   set_visible_child_namerf   INIT_BUTTONSr|   PERM_TO_SEND_BUTTONSPERM_TO_ACCEPT_BUTTONSry   TRANSFER_SENDING_BUTTONSTRANSFER_RECEIVING_BUTTONSrz   TRANSFER_PAUSED_SENDING_BUTTONS!TRANSFER_PAUSED_RECEIVING_BUTTONSr   TRANSFER_FAILED_SENDING_BUTTONS!TRANSFER_FAILED_RECEIVING_BUTTONSr   %TRANSFER_FAILED_UNRECOVERABLE_BUTTONSr   TRANSFER_FILE_NOT_FOUND_BUTTONSr   r   TRANSFER_TEXT_MESSAGE_BUTTONSr   !TRANSFER_COMPLETED_SENDER_BUTTONS#TRANSFER_COMPLETED_RECEIVER_BUTTONSr   r   TRANSFER_CANCELLED_BUTTONSr   "TRANSFER_STOPPED_BY_SENDER_BUTTONSr   $TRANSFER_STOPPED_BY_RECEIVER_BUTTONSrU   s    rW   rT   z OpItem.refresh_buttons_and_icons   s   77 1 C CC  334H#,,J]J]^  334JCLLL_L_`77>>X111OO!!#OO**477==#,,:M:MN  ))$''*=*=>  ,,DGG]1S-ST''001D1DE''33
477M8Z4Z[77>>hmmX-A-ABB  77F$$\2WW^^x:::  77	Bww  $5$G$GG(()=>(()?@WW^^x444  77Gww  $5$G$GG(()AB(()CDWW^^x.  77Gww  $5$G$GG(()HI(()JKWW^^x.ww  $5$G$GG(()HI(()JK  77	BWW^^x<<<$$%JK  77	BWW^^x666  77	B$$%DEWW^^ 1 1 ( 9 9 ; ;$''=1$$;;NK(()FG$$;;IFdggv.,,-NO,,-PQWW^^ G G ( I I K K$$%?@WW^^x999jRX>Y  77	B$$%GHWW^^ : :H<X<XYY  77	B$$%IJ ZrX   c                 8    | j                   j                          y rZ   )r1   accept_transferrU   buttons     rW   rI   zOpItem.accept_button_clicked!      !rX   c                 8    | j                   j                          y rZ   )r1   decline_transfer_requestr   s     rW   rJ   zOpItem.decline_button_clicked$  s    ((*rX   c                 8    | j                   j                          y rZ   )r1   cancel_transfer_requestr   s     rW   rK   zOpItem.cancel_button_clicked'  s    '')rX   c                 8    | j                   j                          y rZ   )r1   retry_transferr   s     rW   rL   zOpItem.restart_button_clicked*  s     rX   c                      y rZ   r    r   s     rW   rM   zOpItem.pause_button_clicked-  s    rX   c                 8    | j                   j                          y rZ   )r1   stop_transferr   s     rW   rN   zOpItem.stop_button_clicked0  s    rX   c                 8    | j                   j                          y rZ   )r1   remove_transferr   s     rW   rO   zOpItem.remove_button_clicked3  r   rX   c                     t        | j                  j                        dk(  r-t        j                  | j                  j                  d          y t        j                          y )Nrk   r   )r   r1   top_dir_basenamesutilopen_save_folderr   s     rW   rP   zOpItem.folder_button_clicked6  sB    tww(()Q.!!$''";";A">?!!#rX   c                 8    | j                   j                          y rZ   )r1   copy_messager   s     rW   rQ   zOpItem.copy_button_clicked<  s    rX   c                     d | _         | j                  j                         j                          d | _        	 | j                  j                  | j                         d | _        y #  Y d | _        y xY wrZ   )r9   r;   
get_parentdestroyr1   disconnect_by_funcrR   r   s    rW   r   zOpItem.destroy?  s`    		&&(		GG&&t';';< 	s   %A% %A0)__name__
__module____qualname__r0   rR   rf   rS   rT   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r   __classcell__rV   s   @rW   r"   r"   ]   sV    ')RC?HVTDKL"+*! "$rX   r"   c                       e Zd Zej                  j
                  dd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 Zd	 Zd
 Zd Z xZS )OverviewButtonNr    )update-sortr.   files-droppedneed-attentionc                 8    t         t                   | _         j                  j	                  d j
                         _         j                  j	                  d j                         _         j                  j	                  d j                         _         j                  j	                  d j                         d _        t        j                  j                  t        j                   j#                  t$        j&                  d             _         j(                  j+                  d       _         j(                  j+                  d       _         j(                  j+                  d	       _         j(                  j+                  d
       _         j(                  j+                  d       _         j(                  j+                  d       _         j(                  j+                  d       _         j(                  j+                  d       _         j(                  j+                  d       _         j(                  j+                  d       _         j(                  j+                  d       _          j,                  j	                  d fd       | j,                  _        |jB                   j,                  _!          j,                  _"         j,                  jG                           jI                           j                   j                         y )Nmachine-info-changedznew-incoming-opznew-outgoing-opremote-status-changedr   zoverview-button.uioverview_buttonoverview_user_avatar_imageoverview_user_avatar_boxoverview_user_ipoverview_user_favoriteoverview_user_button_stackoverview_user_info_labeloverview_user_status_iconoverview_user_display_nameoverview_user_hostname overview_user_connecting_spinnerr.   c                 &    j                  d      S )Nr.   )emit)r   rU   s    rW   <lambda>z)OverviewButton.__init__.<locals>.<lambda>l  s    dii	6J rX   )%r/   r   r0   remote_machinerH   _update_machine_inforemote_machine_changed_id_handle_new_incoming_opnew_incoming_op_id_handle_new_outgoing_opremote_machine_status_changednew_opsr   r2   r3   r4   r5   r6   r7   r8   r9   r:   r   avatar_image
avatar_boxip_labelfavorite_imager   r   r   r   r   r   ident	_delegateshow_allrefresh_favorite_icon)rU   r   	simulatedrV   s   `  rW   r0   zOverviewButton.__init__Q  sP   nd,.,)-)<)<)D)DE[EIE^E^*`&"&"5"5"="=>O?C?[?[#]"&"5"5"="=>O?C?[?[#]##$;T=_=_`{{00f>O>OQe1fgll--.?@ LL334PQ,,112LM//0BC"ll556NO*.,,*A*AB^*_'(,(?(?@Z([%)-)@)@A\)]&*.,,*A*AB^*_'&*ll&=&=>V&W#040G0GHj0k-I'JK &4"*00 $""$**4+>+>?rX   c                    |j                   dk7  }|r|j                   n|j                  }| j                          |j                  t        j
                  k(  r| j                  j                          | j                  j                          | j                  j                  | j                  j                  j                  d             |r&| j                  j!                  t#        d             n| j                  j!                  t#        d      |z         n|j                  t        j$                  k(  r| j                  j                          | j                  j                          | j                  j'                  t(        t*        j,                  j.                         | j                  j!                  d       n|j                  t        j0                  k(  r| j                  j                          | j                  j                          | j                  j'                  t2        t*        j,                  j.                         | j                  j!                  t#        d      |z         na|j                  t        j4                  k(  r| j                  j                          | j                  j                          | j                  j'                  t6        t*        j,                  j.                         | j                  j!                  t#        d      |z         n|j                  t        j8                  k(  r| j                  j                          | j                  j                          | j                  j'                  t6        t*        j,                  j.                         | j                  j!                  t#        d      |z         | j:                  j=                  |       | j>                  j=                  d       y )	Nr    | 
ConnectingzConnecting to %sz%s is not onlinezCannot connect to %sz*Waiting for %s to complete the connection.T) display_namedisplay_hostnameclear_new_op_highlightingrx   r   INIT_CONNECTINGr   r   r   ru   r   r]   r   ip_infoget_textr   rv   r{   ONLINEr   ICON_ONLINEr   r   LARGE_TOOLBAROFFLINEICON_OFFLINEUNREACHABLEICON_UNREACHABLEAWAITING_DUPLEXr   r   r   )rU   r   	have_infore   s       rW   r   z,OverviewButton.remote_machine_status_changedw  s   "//25	.7~**^=\=\&&(  L$@$@@11668**//1MM""4#6#6#>#>#G#G#NO,,Q|_=,,Q/A-BT-IJ""l&9&9911668**//1**==k3<<KeKefKK((,""l&:&::11668**//1**==lCLLLfLfgKK((+=)>)EF""l&>&>>11668**//1**==>NPSP\P\PjPjkKK((+A)BT)IJ""l&B&BB11668**//1**==>NPSP\P\PjPjkKK((+W)X[_)_`''33I>##//5rX   c                    | j                   j                  | j                  j                         | j                  j                  dk7  rI| j
                  j                  | j                  j                  d| j                  j                         n/| j
                  j                  | j                  j                         | j                  j                  | j                  j                  j                  d             | j                  j                  r0| j                  j                  | j                  j                         n4| j                  j                  dt        j                  j                          | j#                  |       | j%                          | j'                  d       | j(                  j+                          y )Nr   @r  xsi-avatar-default-symbolicr   )r   r]   r   r  	user_namer   r	  r   r  r  avatar_surfacer   set_from_surfacer   r   r   DNDr   r  r   r   r  rU   r   s     rW   r   z#OverviewButton._update_machine_info  s@   ''001D1D1Q1QR((B.''00D<O<O<Y<Y[_[n[n[[  2A  B''001D1D1U1UVt22::CCEJK--..t/B/B/Q/QR001NPSP\P\P`P`a**>:""$		- rX   c                 6   | xj                   dz  c_         t        j                  dd| j                         | j                   fz  }| j                  j	                  |       | j                  j                         j                  d       | j                  d       y )Nrk   z%d new incoming transferz%d new incoming transferssuggested-actionr   )r   gettextngettextr   rv   get_style_context	add_classr   )rU   r   r1   texts       rW   r   z&OverviewButton._handle_new_incoming_op  sy     : ;T\\KNRll_] 	$$T*%%'112DE		"#rX   c                     | xj                   dz  c_         |j                  t        j                  t        j                  fv r;| j
                  j                         j                  d       | j                  d       y y )Nrk   destructive-actionr   )	r   rx   r   r   r   r   r#  r$  r   )rU   r   r1   s      rW   r   z&OverviewButton._handle_new_outgoing_op  sZ    99(*A*ABBKK))+556JKII&' CrX   c                 :   d| _         | j                  j                  t        j                  k(  r| j
                  j                  d       | j
                  j                         j                  d       | j
                  j                         j                  d       y )Nr   r   r   r'  )	r   r   rx   r   r  r   rv   r#  remove_classr   s    rW   r
  z(OverviewButton.clear_new_op_highlighting  sm    %%)<)<<KK((,%%'445GH%%'445IJrX   c                    | j                   j                          | j                  j                  r5| j                   j	                  dt
        j                  j                         y | j                  j                  dk7  r5| j                   j	                  dt
        j                  j                         y | j                   j                          y )Nxsi-starred-symbolicr   z!xsi-document-open-recent-symbolic)
r   r   r   favoriter   r   r   r   recent_timer   r   s    rW   r  z$OverviewButton.refresh_favorite_icon  s      "''223I3<<K^K^_  ,,1223VX[XdXdXkXkl%%'rX   c                    | j                   dkD  r,| j                  j                  | j                          d| _         | j                  dkD  r,| j                  j                  | j                         d| _        d | j                  _        d | j                  _        d | j                  _        t        j                  d| j                  j                  z         t        j                  j                  |        y )Nr   z@UI: (%s) Disconnecting overview remote button from RemoteMachine)r   r   
disconnectr   r   r   r  loggingdebugr	  r   Object
do_disposer   s    rW   r3  zOverviewButton.do_dispose  s    ""Q&**4+B+BC&'D#))A-**4+I+IJ-.D* &*"  $X[_[n[n[[  	A!!$'rX   F)r   r   r   r   SignalFlagsRUN_LAST__gsignals__r0   r   r   r   r   r
  r  r3  r   r   s   @rW   r   r   I  s    ++44dB?''00$;!--66bA"..77rB	L$@L#6J*	$(K((rX   r   c                   r    e Zd Zej                  j
                  ddfej                  j
                  ddfdZ fdZd Zd Z	dIdZ
dIdZd	 ZdJd
ZdJdZdIdZdKdZd Zd Zd Zd ZdIdZd Zd ZdIdZdIdZd ZdIdZdIdZdLdZd Zd ZdIdZ d Z!dIdZ"dId Z#dId!Z$dMd"Z%d# Z&d$ Z'd% Z( ejR                  e*f&      d'        Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1dKd.Z2d/ Z3d0 Z4dId1Z5d2 Z6d3 Z7d4 Z8dId5Z9d6 Z:d7 Z;d8 Z<d9 Z=d: Z>d; Z?d< Z@d= ZAd> ZBd? ZCd@ ZDdA ZEdNdBZFdC ZGdIdDZHdE ZIdF ZJdNdGZKdH ZL xZMS )O
WarpWindowNr    )exitrestartc                     t         t                   d  _        d _        d _        i  _        t        j                          _	        t        j                  j                  t        j                  j                  t         j"                  d             _         j$                  j'                  d       _         j$                  j'                  d       _         j$                  j'                  d       _         j$                  j'                  d       _         j$                  j'                  d       _         j$                  j'                  d	       _         j$                  j'                  d
       _         j$                  j'                  d       _         j$                  j'                  d       _         j$                  j'                  d       _         j$                  j'                  d       _         j$                  j'                  d       _         j$                  j'                  d       _         d _!        d _"         j$                  j'                  d       _#         j$                  j'                  d       _$         j$                  j'                  d       _%         jF                  jM                  d        jJ                  jO                  d jP                          j$                  j'                  d       _)         jU                           j$                  j'                  d       _+         jV                  jO                  d fd        j$                  j'                  d       _,         jX                  jO                  d jZ                          j$                  j'                  d       _.         j\                  jO                  d j^                          j$                  j'                  d       _0         j`                  jO                  d jb                          j$                  j'                  d       _2         j$                  j'                  d       _3         j$                  j'                  d       _4         j$                  j'                  d       _5         j$                  j'                  d       _6         j$                  j'                  d        _7         j$                  j'                  d!       _8         j$                  j'                  d"       _9         jr                  jO                  d jt                          j$                  j'                  d#       _;         jv                  jO                  d$ jx                          j$                  j'                  d%       _=         j$                  j'                  d&       _>         j$                  j'                  d'       _?         j$                  j'                  d(       _@         j$                  j'                  d)       _A         j$                  j'                  d*       _B         j$                  j'                  d+       _C         j$                  j'                  d,       _D         j$                  j'                  d-       _E         j$                  j'                  d.       _F         j                  jO                  d j                          j$                  j'                  d/       _H         j$                  j'                  d0       _I         j                  jO                  d j                          j                  j                  t        j                                 j$                  j'                  d1       _N         j                  jO                  d j                          j$                  j'                  d2       _P         j                  jO                  d j                          j                  j                  t        j                                t        j                         }t         j                  st        rt        j                  j                         j                         dkD  ryt        j                  t        d3      4      }|j                  |       t        j                  j                         j                  d  j                        }|j                  |       t        j                  t        d5      4      }|j                  |       t        j                          _a         j                  jO                  d6 j                         |j                   j                         |j                  t        j                  d78             t        j                  t        d9      d7:      }|jO                  d; j                         |j                  |       |j                           jp                  j                  |       d _g        d _h        d _i         j(                  jO                  d< j                         t        j                         }t        j                  t        d=      4      }|jO                  d; j                         |j                  |       |j                  t        j                  d78             t        j                  t        d>      d?      }|jO                  d; j                         |j                  |       | _m        t        j                  t        d@      d?      }|jO                  d; j                         |j                  |       | _o        |j                  t        j                  d78             t        j                  t        dA      4      }|jO                  d; j                         |j                  |       t        j                  t        dB      4      }|jO                  d; j                         |j                  |       t        j                  t        dC      4      }|jO                  d; j                         |j                  |       |j                           j,                  j                  |       d _         jn                  jO                  dD j                          jn                  jO                  dE j                          jn                  jO                  dF j                          j4                  jO                  dG j                          j(                  jO                  d$ j                          j(                  jO                  dHdI         j                  jO                  d j                          j                          y )JNFr   zmain-window.uimain_window
view_stackmenu_buttonoverview_scrolled_windowuser_list_box!user_list_no_search_results_labelsearch_entryapp_display_nameapp_ip	app_ifaceapp_local_namesomething_went_wrong_labelbad_save_folder_labelsecmo_infobarsecmo_infobar_labelsecmo_infobar_prefs_buttonr.   sandbox_mode_infobarsandbox_infobar_close_buttonc                 8    j                   j                         S rZ   )rM  ru   )brU   s    rW   r   z%WarpWindow.__init__.<locals>.<lambda>  s    DLeLeLjLjLl rX    sandbox_infobar_more_info_button	user_backuser_favoriteuser_favorite_imageuser_avatar_imageuser_display_nameuser_hostnameuser_ipuser_op_listuser_send_buttonuser_send_msg_buttonuser_msg_entryzkey-press-eventuser_msg_boxuser_online_boxuser_online_imageuser_online_labeluser_online_spinneruser_clear_ops_buttonapp_restart_ops_count_labelapp_restart_spinnerapp_restart_iconapp_restart_buttonno_disk_space_labelno_disk_space_trash_buttonno_disk_space_open_save_buttonno_disk_space_baobab_button	Favoritesr   Recentsitem-activatedTrc   	Browse...r   rc   activatezdelete-eventOpen save folderzConnect manually)r   	sensitivezRestart servicePreferencesAboutQuitz	drag-dropzdrag-data-receivedzdrag-motionzsearch-changedzfocus-in-eventc                 $    | j                  d      S NF)set_urgency_hint)windowevents     rW   r   z%WarpWindow.__init__.<locals>.<lambda>  s    &2I2I%2P rX   )zr/   r9  r0   current_selected_remote_machinedrop_pendingwindow_close_handler_idselected_op_itemsnetworkmonitorget_network_monitornetmonr   r2   r3   r4   r5   r6   r7   r8   r9   r:   r{  r>  r?  r@  rA  rB  rC  app_display_name_labelapp_ip_labelapp_iface_labelapp_local_name_labelsomething_wrong_labelrI  secmo_exit_start_timesecmo_timer_idrJ  rK  rL  set_revealedrH   open_prefs_networkingrM  update_sandbox_mode_infobar!sandbox_mode_infobar_close_buttonsandbox_mode_more_info_buttonsandbox_info_callbackuser_back_buttonback_to_overviewuser_favorite_buttonuser_favorite_clickedrT  rU  user_display_name_labeluser_hostname_labeluser_ip_labelrY  rZ  r[  send_msg_button_clickedr\  msg_entry_key_pressr]  r^  r_  r`  ra  rb  rc  rd  re  rf  app_restart_button_clickedrg  rh  no_disk_space_trash_clickedr   r   trash_uri_supportedri  no_disk_space_open_save_clickedrj  no_disk_space_baobab_clickeddisk_usage_availableMenuFLATPAK_BUILDHAVE_XAPP_FAVORITESr   rk  get_defaultget_n_favoritesMenuItemr{   addcreate_menufavorite_selectedset_submenuget_recent_chooser_menurecent_menurecent_item_selectedSeparatorMenuItemopen_file_pickerr  	set_popupserver_start_timeout_iddiscovery_time_out_idserver_restartingwindow_delete_eventon_open_location_clickedmanual_connectmanual_connect_menu_itemrestart_service_clickedrestart_service_menu_itemopen_preferences
show_about	menu_quiton_drag_dropon_drag_data_receivedon_drag_motionsearch_entry_changedwindow_key_pressclear_ops_clickedupdate_local_user_info)rU   	main_menur;   	favoritespickermenurV   s   `     rW   r0   zWarpWindow.__init__  s
   j$(*/3,!'($!# %88: {{00f>O>OQa1bc\\,,];,,11,?<<22=A(,(?(?@Z([%!\\44_E151H1HIl1m. LL33NC&*ll&=&=>P&Q# LL33H=#||66{C$(LL$;$;<L$M!%)\\%<%<=Y%Z"%)\\%<%<=T%U"%&"!\\44_E#'<<#:#:;P#Q *.,,*A*AB^*_'''.''//	4;U;UV$(LL$;$;<R$S!((*151H1HIg1h...66yBlm-1\\-D-DEg-h***229d>X>XY !% 7 7 D%%i1F1FG$(LL$;$;O$L!!!)))T5O5OP#'<<#:#:;P#Q !%!8!89L!M'+||'>'>?R'S$#'<<#:#:?#K !\\44Y? LL33NC $ 7 78J K$(LL$;$;<R$S!!!)))T5Q5QR"ll556FG##$5t7O7OP LL33NC#||667HI!%!8!89L!M!%!8!89L!M#'<<#:#:;P#Q %)\\%<%<=T%U"+/<<+B+BC`+a(#'<<#:#:;P#Q  $ 7 78J K"&,,"9"9:N"O''	43R3RS#'<<#:#:;P#Q *.,,*A*AB^*_'''//	4;[;[\''33D4L4L4NO.2ll.E.EFf.g+++33It?c?cd+/<<+B+BC`+a(((00D<]<]^((44T5N5N5PQ HHJ	 $$*=~~))+;;=A||!K.9d# NN668DDT4KaKab	  +||!I,/d779  !143L3LM))*c++D9:AkNDAz4#8#89f''	2'($%&"!&N 44	6 xxz||!$6"78Z!>!>?&&t45||!$6"75IZ!4!45(,%||!$5"6%HZ!=!=>)-&&&t45||!M"23Z!6!67||!G*-Z1||!F),Z0""4( "!!+t/@/@A!!"68R8RS!!-1D1DE 	!!"2D4M4MN-t/D/DE,P	R 	""**9d6L6LM##%rX   c                 B    t        j                  | j                         y rZ   )r   AboutDialogr{  )rU   widgets     rW   r  zWarpWindow.show_about  s    %rX   c                     	 t        j                  | j                  dt        j                                y # t        j
                  $ r,}t        j                  d|j                  z         Y d }~y d }~ww xY w)NzHhttps://github.com/linuxmint/warp/blob/master/README.md#folder-isolationzCouldn't open readme url: %s)	r   show_uri_on_windowr{  get_current_event_timer   Errorr0  warnr   )rU   r  es      rW   r  z WarpWindow.sandbox_info_callback  sg    	E""4;;0z|  }W  }W  }Y  Zzz 	ELL7!))CDD	Es   36 A5	"A00A5c                     t        j                         r*| j                  j                          t
        j                  S | j	                  d       t
        j                  S Nr:  )r   use_tray_iconr{  ru   r   r	   
EVENT_STOPrU   r  r|  datas       rW   r  zWarpWindow.window_delete_event  sB     KK ~~ IIf~~rX   c                    | j                   j                         sG| j                  j                         dk(  r*| j                   j	                          t        j                  S |j
                  t        j                  k(  rW| j                  j                         dk(  r:| j                  j                         s | j                          t        j                  S t        j                  S )Noverviewuser)rC  	has_focusr>  get_visible_child_name
grab_focuskeyvalr	   KEY_BackSpacer\  r  r  EVENT_PROPAGATEr  s       rW   r  zWarpWindow.window_key_press  s      **,1W1W1Y]g1g((*
 """	 \\S...4??3Y3Y3[_e3enr  oB  oB  oL  oL  oN!!#>>!"""rX   c                 v    | j                   j                         dk(  ry | j                   j                  |       y )Nr;  )r>  r  r   )rU   pages     rW   	show_pagezWarpWindow.show_page  s,    ??113y@..t4rX   c                     | j                   j                         r| j                   j                          y | j                  |       y rZ   )r{  	is_activeru   r   rU   times     rW   toggle_visibilityzWarpWindow.toggle_visibility  s-    ;;  "KKIIdOrX   c                     | j                   j                         s| j                   j                          | j                   j                  |       y rZ   )r{  get_visibler   present_with_timer  s     rW   r   zWarpWindow.show  s4    ;;**,  "KK))$/rX   c                    |j                         }t        j                  |t        |      t        j                  j
                        j                         }d}| j                  j                         D ]  }dj                  |j                  j                  |j                  j                  d|j                  j                  |j                  j                  j                  d      g      }t        j                  |t        |      t        j                  j
                        j                         }||v rd}|j                          |j!                           | j"                  j%                  |        y )NF r  r  T)r  r   utf8_normalizer   NormalizeModeDEFAULTlowerrA  get_childrenr6   r   r  r  hostnamer  r   ru   rB  r   )	rU   entryr  querynormalized_query	found_oner   joinednormalized_contentss	            rW   r  zWarpWindow.search_entry_changed  s$    ..uc%j$BTBTB\B\]cce	((557 
	FXXv44AA+1+@+@+J+JFLaLaLjLj k%44<<EEeLN OF #'"5"5fc&k4K]K]KeKe"f"l"l"n#66 	
	 	..::y=IrX   c                 Z   | j                   dkD  r&t        j                  | j                          d| _         || _        |rt        nt
        }t        j                  || j                        | _         | j                  j                  d       | j                          | j                  d       y )Nr   Fstartup)r  r   source_remover  SERVER_RESTART_TIMEOUTSERVER_START_TIMEOUTtimeout_add_secondsserver_not_started_timeoutr  set_sensitiver  r  )rU   
restartingtimeouts      rW   start_startup_timerzWarpWindow.start_startup_timer  s    ''!+t;;<+,D(!+,6(<P'+'?'?IhIh'i$%%33E:((*y!rX   c                     | j                  d       | j                  j                  s,| j                  j	                  t        d             d| _        y| j                  j	                  t        d             d| _        y)Nzserver-problemz.You don't appear to be connected to a network.z1Startup was unsuccessful, please check your logs.r   F)r  r  onliner  r]   r{   r  r   s    rW   r  z%WarpWindow.server_not_started_timeout  sj    '({{!!&&//2b0cd ()$ &&//2e0fg'($rX   c                     t         j                  dk(  xr& t         j                  rt        j                         nd}| j
                  j                  |       y )NlegacyT)r7   sandbox_moder  r   home_is_writablerM  r   )rU   insecures     rW   r  z&WarpWindow.update_sandbox_mode_infobar  s@    ''83tU[UiUi$:O:O:Qos!!--h7rX   c                     | j                   dkD  r&t        j                  | j                          d| _         | j                          y Nr   )r  r   r  r  r   s    rW   show_no_networkzWarpWindow.show_no_network  s8    ''!+t;;<+,D('')rX   c                    | j                   j                  D ]  }|j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  f	v s|j                           y rZ   )r}  transfer_opsrx   r   r   r   r   r   r   r   r   r   r   r   )rU   r   r1   s      rW   r  zWarpWindow.clear_ops_clicked  s    66CC 
	%ByyXDD%FF%77%99%__%::%44%..%668 8 ""$
	%rX   c                 p    | j                   j                         }| j                  j                  |g       y rZ   )r  get_current_urir}  
send_files)rU   recent_chooserr  uris       rW   r  zWarpWindow.recent_item_selected  s,    ..0,,77>rX   c                 <    | j                   j                  |g       y rZ   )r}  r  )rU   r  r  s      rW   r  zWarpWindow.favorite_selected  s    ,,77>rX   c                 $    | j                          y rZ   )send_text_messager   s     rW   r  z"WarpWindow.send_msg_button_clicked  s     rX   c                     |j                   t        j                  k(  rG|j                  t        j                  j
                  z  r | j                          t        j                  S t        j                  S rZ   )	r  r	   
KEY_ReturnstateModifierTypeCONTROL_MASKr  r  r  )rU   r  r|  r  s       rW   r  zWarpWindow.msg_entry_key_press  sK    <<3>>)ekkC<L<L<Y<Y.Y""$>>!"""rX   c                    t        j                  | j                        }|j                         }|t        j
                  j                  k(  r+|j                         }| j                  j                  |       |j                          y rZ   )r   create_file_and_folder_pickerr{  runr   ResponseTypeOKget_urisr}  r  r   )rU   r   r  dialogresuri_lists         rW   r  zWarpWindow.open_file_picker  s_    33DKK@jjl#""%%%(H00;;HErX   c                     | j                   j                  t        j                  k7  rt	        j
                  |d|       y y r  )r}  rx   r   r  r	   drag_status)rU   r  contextxyr  s         rW   r  zWarpWindow.on_drag_motion$  s5    //66,:M:MMOOGQ- NrX   c                 \    |j                  |d       }d| _        |j                  |||       y )NT)drag_dest_find_targetr~  drag_get_data)rU   r  r'  r(  r)  _timer  atoms           rW   r  zWarpWindow.on_drag_drop)  s.    ,,Wd; WdE2rX   c	                    | j                   j                  t        j                  k7  rt	        j
                  |d|       y | j                  s0t	        j
                  |t        j                  j                  |       y |rV|j                         t        j                  j                  k(  r+|j                         }	| j                   j                  |	       t        j                  |dd|       d| _        y Nr   TF)r}  rx   r   r  r	   r&  r~  
DragActionCOPYget_selected_actionr!  r  r   drag_finish)
rU   r  r'  r(  r)  r  infor-  	user_datauriss
             rW   r  z WarpWindow.on_drag_data_received.  s    //66,:M:MMOOGQ.  OOGS^^%8%8%@**,0C0CC}}44??Eue4!rX   c                     | j                   j                  t        j                                | j                  j                  |       | j
                  j                  |       || _        || _        || _        y rZ   )	r  r]   r   get_local_namer  r  
current_ipcurrent_ifacecurrent_auth_port)rU   ipiface	auth_ports       rW   r  z!WarpWindow.update_local_user_info?  s^    !!**4+>+>+@A%%e,""2&"!*rX   c                     |rF| j                          | j                  j                  d       | j                  j                          y | j                  j                  d       | j	                          y r`   )stop_secure_mode_timerrJ  r  ru   start_secure_mode_timer)rU   	is_secures     rW   update_secure_mode_infoz"WarpWindow.update_secure_mode_infoG  sW    '')++E2##%++D1((*rX   c                     | j                          t        j                         | _        t        j                  d| j
                        | _        y )Nrk   )rA  r   get_monotonic_timer  r  secure_mode_waker  r   s    rW   rB  z"WarpWindow.start_secure_mode_timerP  s:    ##%%)%<%<%>""66q$:O:OPrX   c                    t        j                         | j                  z
  dz  dz  }t        j                  t
        |z
  dz        }t        j                  t        d      t        d      |      |fz  }| j                  j                  |       |dk(  r1| j                          | j                  d       t         j                  S | j                  j                          | j                  j!                  d       t         j"                  S )N  <   z}Warpinator is running with limited functionality, and will exit in %d minute. To enable Secure Mode, set a unique group code.z~Warpinator is running with limited functionality, and will exit in %d minutes. To enable Secure Mode, set a unique group code.r   r:  T)r   rF  r  mathceilSECURE_MODE_EXIT_TIME_SECONDSr!  r"  r{   rK  	set_labeldisplay_shutdownr   SOURCE_REMOVErJ  r   r  SOURCE_CONTINUE)rU   r  elapsed_sec	remainingr   s        rW   rG  zWarpWindow.secure_mode_wakeU  s    ..043M3MMQUUX\\II<{JbPQ	   H I H IJS	U YbWc	d 	  **51>!!#IIf%%%!''-###rX   c                 p    | j                   dkD  r't        j                  | j                          d| _         y y r  )r  r   r  r   s    rW   rA  z!WarpWindow.stop_secure_mode_timeri  s1    "t223"#D #rX   c                 F    | j                          | j                  d       y r  rO  r   rU   r  r  s      rW   r  zWarpWindow.menu_quitn      		&rX   c                 ,    t        j                          y rZ   r   r   rW  s      rW   r  z#WarpWindow.on_open_location_clickedr      rX   c                 (    | j                  d d       y )Nnetwork)r  rU   r   r  s      rW   r  z WarpWindow.open_prefs_networkingu  s    dI.rX   c                     t        j                  | j                  |      | _        | j                  j                  j	                  d| j
                         y )Nr   )r   ru  r{  prefs_windowrH   on_prefs_destroy)rU   menuitemr  s      rW   r  zWarpWindow.open_preferencesx  s=    !--dkk4@  ((D4I4IJrX   c                     d | _         y rZ   )r`  )rU   r{  s     rW   ra  zWarpWindow.on_prefs_destroy|  s
     rX   c                 X    t        |       | _        | j                  j                          y rZ   )ManualConnectDialogconnect_dialogr   )rU   r{   s     rW   r  zWarpWindow.manual_connect  s!    1$7  "rX   c                 \    | j                  d       | j                  j                  d       y )Nr;  F)r   r  r  )rU   rb  s     rW   r  z"WarpWindow.restart_service_clicked  s"    		)&&44U;rX   )	arg_typesc                 4    t        j                  d|z          y )NzConnecting to )r0  r1  )rU   hosts     rW   manual_connect_to_hostz!WarpWindow.manual_connect_to_host  s    &-.rX   c                     | j                   j                         }|j                         \  }}| j                  j	                  |j                  ||d             |j                  ||       y ry  )r\  
get_buffer
get_boundsr}  r  r  delete)rU   bufbuf_sbuf_es       rW   r  zWarpWindow.send_text_message  sW    !!,,.~~'u,,>>s||ESXZ_?`a

5% rX   c                     t        j                         }| j                  j                  |       | j	                  d       y )Nzbad-save-folder)r   get_save_pathrI  r]   r  )rU   r5   s     rW   report_bad_save_folderz!WarpWindow.report_bad_save_folder  s1    ""$""++D1()rX   c                     | j                   j                  t        d      t        j                  t        j                         dz  dz        z         | j                  d       y )NzBNot enough disk space remaining to receive files (%s is reserved).i   zno-disk-space)rg  rN  r{   r   format_sizer   get_min_free_spacer  r   s    rW   report_no_disk_spacezWarpWindow.report_no_disk_space  sT      **RS  !9!9!;d!BT!IJK	

 	'rX   c                 ,    t        j                          y rZ   )r   
open_trashr   s     rW   r  z&WarpWindow.no_disk_space_trash_clicked  s    rX   c                 ,    t        j                          y rZ   rZ  r   s     rW   r  z*WarpWindow.no_disk_space_open_save_clicked  r[  rX   c                 ,    t        j                          y rZ   )r   open_disk_usager   s     rW   r  z'WarpWindow.no_disk_space_baobab_clicked  s    rX   c                    | j                   dkD  r&t        j                  | j                          d| _         | j                  dkD  r&t        j                  | j                         d| _        |j	                  d| j
                         t        ||      }|j	                  d| j                         |j	                  d| j                         |j	                  d| j                         |j	                  d| j                         | j                  j                  |j                         | j                  d       | j                          y )Nr   zfocus-remoter   r   r.   r   r  )r  r   r  r  rH   focus_remote_machiner   sort_buttonsremote_machine_files_droppedremote_machine_button_clicked_get_user_attentionrA  r  r   r  )rU   r   r  r   s       rW   add_remote_buttonzWarpWindow.add_remote_button  s    %%)t99:)*D&''!+t;;<+,D(~t/H/HI	:}d&7&78(I(IJy$"D"DE')A)ABv}}-z"rX   c                 \   | j                   j                         }|D ]7  }|j                  |j                  k(  s| j                   j                  |       9 | j	                          t        | j                   j                               dk(  r| j                          | j                          y r  )rA  r  r   remover  r   start_discovery_timerr  )rU   r   buttonschilds       rW   remove_remote_buttonzWarpWindow.remove_remote_button  s    $$113 	1E{{n222""))%0	1 	t!!..01Q6&&(rX   c                 |    | j                   j                         }|D ]  }| j                   j                  |        y rZ   )rA  r  r  rU   r  r  s      rW   clear_remoteszWarpWindow.clear_remotes  s9    $$113 	-E%%e,	-rX   c                     | j                   | j                          | j                  |       | j                  j	                         s| j                          y y rZ   )r}  cleanup_user_viewswitch_to_user_viewr{  r  r  )rU   r   r  s      rW   r  zWarpWindow.focus_remote_machine  sI    //;""$  0{{$$&""$ 'rX   c                 \    | j                   j                  d       | j                  d       y )NFshutdown)r  r  r  r   s    rW   rO  zWarpWindow.display_shutdown  s"    %%33E:z"rX   c                     | j                   !| j                   j                          d | _         | j                  j                  d       | j	                  d       y )NFr;  )r`  r   r  r  r  r   s    rW   display_restartzWarpWindow.display_restart  sH    (%%' $D%%33E:y!rX   c                    |dkD  rt        j                  t        d      t        d      |      |z  }| j                  j	                  |       | j                  j                          | j                  j                          | j                  j                          | j                  j                  d       y | j                  j	                  d       | j                  j                          | j                  j                          | j                  j                  d       | j                  j                         j                  d       y )Nr   z$Waiting for %d operation to completez%Waiting for %d operations to completeFr   Tr   )r!  r"  r{   rc  rN  r   rd  re  ru   rf  r  r#  r$  )rU   
active_opsr   s      rW   update_restart_dialog_statusz'WarpWindow.update_restart_dialog_status  s   >$$899: 	E ,,66u=,,113$$))+!!&&(##11%8,,66r:$$))+!!&&(##11$7##557AABTUrX   c                 F    | j                          | j                  d       y r  rV  r^  s      rW   r  z%WarpWindow.app_restart_button_clicked  rX  rX   c                     d| _         | j                  dkD  r&t        j                  | j                         d| _        | j                  j                  d       | j                          y )NFr   T)r  r  r   r  r  r  r  r   s    rW   notify_server_startedz WarpWindow.notify_server_started  sT    !&''!+t;;<+,D(&&44T:""$rX   c                 \   t        j                  d       | j                  dkD  r&t        j                  | j                         d| _        | j
                  ry | j                  j                  d       t        j                  t        | j                        | _        | j                  d       y )Nz&UI: start discovery timer (no remotes)r   T	discovery)r0  r1  r  r   r  r  r  r  r  DISCOVERY_TIMEOUTdiscovery_timed_outr  r   s    rW   r  z WarpWindow.start_discovery_timer	  s    >?%%)t99:)*D&
 !!%%33D9%)%=%=>OQUQiQi%j"{#rX   c                 ^    t        j                  d       | j                  d       d| _        y)Nz$UI: Discovery timed out (no remotes)z
no-remotesr   F)r0  r1  r  r  r   s    rW   r  zWarpWindow.discovery_timed_out  s&    <=|$%&"rX   c                 :    | j                  |j                         y rZ   r  r   r   s     rW   r  z(WarpWindow.remote_machine_button_clicked!        !6!67rX   c                 :    | j                  |j                         y rZ   r  r   s     rW   r  z'WarpWindow.remote_machine_files_dropped$  r  rX   c                     | j                          | j                  j                         j                  d       | j                  j                         s| j                  j                  d       y y )Nr   T)r  r@  get_vadjustment	set_valuer{  r  rz  r   s     rW   r  zWarpWindow._get_user_attention'  sR    %%557AA!D{{$$&KK((. 'rX   c                 T    | j                  d       || _        | j                          y )Nr  )r  r}  refresh_remote_machine_viewr  s     rW   r  zWarpWindow.switch_to_user_view-  s"    v/=,((*rX   c                 F   | j                   j                         dk7  ry | j                  }	 |j                  | j                         |j                  d| j                         | j	                  |       | j                  j                  |j                         | j                  j                  |j                  dk7         |j                  dk7  r5| j                  j                  |j                  d|j                         n%| j                  j                  |j                         | j                  j                  t        |j                   j#                  d                   |j$                  &| j&                  j)                  |j$                         n4| j&                  j+                  dt,        j.                  j0                         | j2                  j                  |j4                         | j7                          | j9                          y # t
        $ r Y w xY w)Nr  r   r   r  r  r  )r>  r  r}  r   &current_selected_remote_status_changed	TypeErrorrH   r  r]   r  r   r  r  r	  r  strr  r  r  rU  r  r   r   r   r  r]  supports_messagesadd_op_itemssync_favorite)rU   remotes     rW   r  z&WarpWindow.refresh_remote_machine_view3  s   ??113v=55	%%d&Q&QR 	.BB	D 	33F;$$--f.A.AB$$001D1D1JKr!$$--9I9I9?9P9P/R S $$--f.E.EF##C(?(?(F$GH  ,""33F4I4IJ""556SUXUaUaUeUef%%f&>&>?7  		s   H 	H H c                 
   |j                   t        j                  k(  r7t        j                  j                  ddd      }| j                  j                  t        j                  j                  |ft        j                  j                         | j                  j                  d       | j                  j                  d       | j                   j#                  t%        d             | j&                  j)                  t*        t        j,                  j.                         | j0                  j3                          | j&                  j5                          n|j                   t        j6                  k(  r| j                  j9                          | j                  j                  d       | j                  j                  d       | j                   j#                  t%        d             | j&                  j)                  t:        t        j,                  j.                         | j0                  j3                          | j&                  j5                          n|j                   t        j<                  k(  r| j                  j9                          | j                  j                  d       | j                  j                  d       | j                   j#                  t%        d             | j&                  j)                  t>        t        j,                  j.                         | j0                  j3                          | j&                  j5                          n|j                   t        j@                  k(  r| j                  j9                          | j                  j                  d       | j                  j                  d       | j                   j#                  t%        d             | j&                  j)                  t>        t        j,                  j.                         | j0                  j3                          | j&                  j5                          n| j                  j9                          | j                  j                  d       | j                  j                  d       | j                   j#                  t%        d	             | j&                  j3                          | j0                  j5                          | jC                          y )
Nztext/uri-listr   TOnlineFOfflinezUnable to connectzWaiting for two-way connectionr  )"rx   r   r  r   TargetEntrynewrY  drag_dest_setDestDefaultsALLr	   r1  r2  rZ  r  r[  r`  r]   r{   r_  r   r  r   r  ra  ru   r   r  drag_dest_unsetr  r  r  r  sync_buttons_enabled)rU   r   r  s      rW   r  z1WarpWindow.current_selected_remote_status_changedX  so     L$7$77OO''!Q?E++C,<,<,@,@-2H,/NN,?,?A !!//5%%33D9""++AhK8""55k3<<C]C]^$$))+""'')""l&:&::--/!!//6%%33E:""++AiL9""55lCLLD^D^_$$))+""'')""l&>&>>--/!!//6%%33E:""++A.A,BC""556FHbHbc$$))+""'')""l&B&BB--/!!//6%%33E:""++A.N,OP""556FHbHbc$$))+""'')--/!!//6%%33E:""++AlO<""'')$$))+!!#rX   c                 p    | j                   j                         D ]  }|j                           i | _         y rZ   )r  valuesr   )rU   r;   s     rW   clear_user_viewzWarpWindow.clear_user_view  s3    **113 	DLLN	 "$rX   c                    | j                          | j                  sy | j                  j                  j                         }|j	                          |D ]K  }t        |      }|| j                  |j                  <   | j                  j                  |j                         M | j                  j                  t        |      dkD         | j                          y r  )r  r}  r  copyreverser"   r  
start_timerY  r  r;   rb  r  r   r  )rU   opsr1   r$   s       rW   r  zWarpWindow.add_op_items  s    33 22??DDF 	0BRjG4;D""2==1!!',,/	0
 	""00SA>!!#rX   c                     | j                   j                         D ]B  }|j                  j                  | j                  j
                  t        j                  k(         D y rZ   )r  r  rB   r  r}  rx   r   r  )rU   r$   s     rW   r  zWarpWindow.sync_buttons_enabled  sN    --446 	uG""001U1U1\1\`l`s`s1st	urX   c                 ^    | j                   s| j                  d       | j                          y )Nr  )r  r  r  r^  s      rW   r  zWarpWindow.back_to_overview  s#    %%NN:& rX   c                 \   | j                   j                         }| j                  _| j                  j                          |D ]@  }|j                  | j                  j                  k(  s'|j
                  j                          B d | _        | j                          | j                          y rZ   )	rA  r  r}  stamp_recent_timer   r  r
  r  r  r  s      rW   r  zWarpWindow.cleanup_user_view  s     $$113//;00BBD  @;;$"F"F"L"LLOO==?@ 04,rX   c                 v    t        j                  | j                  j                         | j	                          y rZ   )r   toggle_favoriter}  r   r  rW  s      rW   r  z WarpWindow.user_favorite_clicked  s(    dBBHHIrX   c                    | j                   j                  r5| j                  j                  dt        j
                  j                         y | j                  j                  dt        j
                  j                         y )Nr+  zxsi-non-starred-symbolic)r}  r,  rT  r   r   r   r   r   s    rW   r  zWarpWindow.sync_favorite  sY    //88$$778NPSP\P\PcPcd$$778RTWT`T`TgTghrX   c                     d }d }| j                   j                         }t        |t        j                  |            }t        |t        j                  |            }|S )Nc                 ^    | j                   }|j                   }t        j                  ||      S rZ   )r   r   sort_remote_machines)arP  ambms       rW   cmp_buttonsz6WarpWindow.get_sorted_button_list.<locals>.cmp_buttons  s+    !!B!!B,,R44rX   c                 l    | j                   }|j                   }|j                  |j                  kD  rdS dS )Nrk   )r  r   )r  rP  adbds       rW   cmp_favoritez7WarpWindow.get_sorted_button_list.<locals>.cmp_favorite  s.    BBbjj028b8rX   key)rA  r  sorted	functools
cmp_to_key)rU   r  r  childrensorted_listrets         rW   get_sorted_button_listz!WarpWindow.get_sorted_button_list  sU    	5
	9
 %%224X9+?+?+LM[i&:&:<&HI
rX   c                 j    | j                         }|D ]  }| j                  j                  |d         y )Nr  )r  rA  reorder_child)rU   r   r  r  s       rW   r  zWarpWindow.sort_buttons  s5    113! 	9F,,VR8	9rX   c                 8    | j                   j                          y rZ   )r{  r   r   s    rW   r   zWarpWindow.destroy  s    rX   rZ   )r   r4  )z0.0.0.0r   r   )generalNN)Nr   r   r   r   r5  r6  r7  r0   r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rD  rB  rG  rA  r  r  r  r  ra  r  r  Signalr  rk  r  ru  ry  r  r  r  r  r  r  r  rO  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   s   @rW   r9  r9    s   $$--tR8''00$;L
f&P&E#50J("	8*%?
?!#
3
""++Q
$($
 /K!#< W^^sf%/ &/!*
( ,-
%#"V(	%$"88/+#J,$\$$&u! i 9rX   r9  c                   6     e Zd Zdef fdZd Zd Zd Z xZS )re  parentc                 
   t         |   t        d      |j                  dd       || _        t        j                  d      | _        d| _        | j                  dd       | j                  t        j                  j                         | j                  t        j                   j"                         t        j$                  j'                  t(        j*                  j-                  t.        j0                  d            | _        | j2                  j5                  d	      }| j7                  |       | j2                  j5                  d
      | _        | j2                  j5                  d      | _        | j2                  j5                  d      | _        | j2                  j5                  d      }| j2                  j5                  d      }| j2                  j5                  d      }| j2                  j5                  d      }| j8                  j?                  d| j@                         | j:                  j?                  d| jB                         tE               }tG        jH                  dd| jK                         z  d      }tM        jN                         jP                  }	|	jR                  |	jR                  nd|	jT                  z  }
d|
|jV                  fz  }|	jR                  <|	jT                  0|dtX        jZ                  j]                  d|	jT                  i      }d|z   }t_        j`                  d|z         |jc                  |       |je                         }|jg                  |d       th        jj                  jm                  tn        jp                  js                  |ju                                     }tv        jx                  j{                  |d| jK                         z  ddd       }t        j|                  || jK                         d       }t        j~                  j                  |      }|j7                  |       |j                  d       |	jR                  >|j                  d|	jR                  |jV                  fz         |j                  d       d}n|j                  d       d}|	jT                  B|j                  d |	jT                  |jV                  fz         |j                  d       |xr d}n|j                  d       d}|r|j                  t        d!             n|j                  t        d"             | j                  |       y )#NzManual connectionTF)titletransient_formodal	resizablez4(warpinator://)?(\d{1,3}(\.\d{1,3}){3}):(\d{1,6})/?$   d   zmanual-connect.uitop_boxip_entryconnect_buttonstatus_labellocal_ip4_labellocal_ip6_label	qr_holderurl_description_labelchangedr.   rk   r      )versionbox_sizeborderz[%s]z%s:%d?ipv6warpinator://zQR code data: %sBMPih  r  z[%s]:%dz)Or connect to one of the addresses below:z Or connect to the address below:)Dr/   r0   r{   r{  r  r   compileip_validator_re
connectingset_default_sizeset_positionr   WindowPositionCENTER_ON_PARENTset_type_hintr	   WindowTypeHintDIALOGr2   r3   r4   r5   r6   r7   r8   r9   r:   r  r  r  r  rH   validate_addresson_connectingr   qrcodeQRCodeget_scale_factorr  r  current_ip_infoip4_addressip6_addressr<  urllibparse	urlencoder0  r1  add_data
make_imagesaver   MemoryInputStreamnew_from_bytesr   Bytesr  getvaluer
   Pixbufnew_from_stream_at_scale cairo_surface_create_from_pixbufImagenew_from_surfacer   rN  	set_focus)rU   r  r  	ip4_label	ip6_labelr  r  qrbytesqrr  host_ipurl_datarq   imgstreampixbufsurfaceqr_imagemultiple_adressesrV   s                      rW   r0   zManualConnectDialog.__init__  s2   q!45V]]Z^jop!zz*abc3'#,,==>3--445{{00f>O>OQd1ef,,)))4\\,,Z8
"ll556FG LL33NCLL++,=>	LL++,=>	LL++K8	 $ 7 78O P

9d&;&;<##It/A/AB )]]$//11
 !446FF)0)<)<)H'%%fW^WjWjNjgv'?'?@@*w/B/B/N!)6<<+A+A67K^K^B_+`aH((3./
Cmmo% &&55djjnnWEUEUEW6XY!!::63I^I^I`C`bdfjlpq66vt?T?T?VX\]99--g6hT" *7+>+>@X@X*Y YZ!!$' $!!%( %*	W-@-@&BZBZ,[ [\!!$' 1 :d!!%( %!++A.Y,Z[!++A.P,QRy!rX   c                 4    d _          j                  j                  d        fd}t        j                  d|        j
                  j                  t        d              j                  j                         } j                  j                  d|       y )NTFc                       j                   j                           j                  rt        j                  S  j                   j                  d       t        j                  S )Ng        )r  progress_pulser  r   rQ  set_progress_fractionrP  r   s   rW   pulsez0ManualConnectDialog.on_connecting.<locals>.pulse3  sD    JJ%%'+++JJ,,S1%%%rX   r  zConnecting...rk  )r  r  r  r   timeout_addr  rN  r{   r  r  r  r   )rU   _btnr2  rj  s   `   rW   r  z!ManualConnectDialog.on_connecting/  su    ))%0	& 	e$##Ao$67zz""$148rX   c                     d| _         | j                  j                  d       |r| j                          y | j                  j                  d|z         y )NFTz<span color='red'>%s</span>)r  r  r  closer  rN  )rU   resultmsgs      rW   on_connection_resultz(ManualConnectDialog.on_connection_resultA  sC    ))$/JJL''(E(KLrX   c                 H   |j                         }	 |j                  d      sd|z  }t        j                  j	                  |      }t        j                  |j                         | j                  j                  d       y #  | j                  j                  d       Y y xY w)Nr  zwarpinator://%sTF)
r  ro   r  r  urlparse	ipaddress
ip_addressr  r  r  )rU   r  addressrq   s       rW   r
  z$ManualConnectDialog.validate_addressJ  s    .."	5%%o6+g5,,''0C  .--d3	5--e4s   A/B B!)	r   r   r   r9  r0   r  r9  r
  r   r   s   @rW   re  re    s"    P"j P"d9$M	5rX   re  c                   0    e Zd Zd' fd	Zd Zd Zd Zd Zd Zd Z	d Z
d(d	Zd
 Zd(dZd Zd Zd Zd Zd Zej(                  d        Zd)dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d*dZ"d(dZ#d  Z$d(d!Z%d(d"Z&d(d#Z'd(d$Z(d(d%Z)d& Z* xZ+S )+WarpApplicationc                 B   t         t        |   dd       d | _        d | _        d| _        d| _        || _        d| _        d| _	        d| _
        d| _        d| _        d | _        d | _        t        j                          | _        d| _        d | _        d | _        d | _        y )Norg.x.WarpinatorT)application_idregister_sessionr   F)r/   r@  r0   r{  status_iconprefs_changed_source_idserver_starting	test_mode
bad_folderinhibit_countinhibit_cookiesave_folder_poll_timer_idapp_restartingr  serverdbus_serviceWarpinatorDBusServiceserver_state_dirtycurrent_portr<  r  )rU   testingrV   s     rW   r0   zWarpApplication.__init__V  s    ot-=Obf-g'($$ )*&#(>>@ #( !%#rX   c                    | j                   j                  ||       | j                   j                  d| j                         | j                   j                  d| j                         t
        j                  j                  | ||      S )Nzhandle-get-live-remoteszhandle-send-files)rO  registerrH   handle_dbus_get_live_remoteshandle_dbus_send_filesr   Applicationdo_dbus_registerrU   
connectionr5   s      rW   rY  z WarpApplication.do_dbus_registerr  sk    "":t4!!";T=^=^_!!"5t7R7RS//j$GGrX   c                 ~    | j                   j                  ||       t        j                  j	                  | ||       y rZ   )rO  
unregisterr   rX  do_dbus_unregisterrZ  s      rW   r^  z"WarpApplication.do_dbus_unregistery  s.    $$Z6**4TBrX   c                     | j                   g S | j                   j                         }|D cg c]"  }|j                  t        j                  k(  s!|$ }}|S c c}w rZ   )rN  list_remote_machinesrx   r   r  )rU   serviceall_remotesr  online_remotess        rW   rV  z,WarpApplication.handle_dbus_get_live_remotes}  sS    ;;Ikk668/:cVfmm|ObOb>b&cc ds   "AAc                     | j                   y | j                   j                         }|D ]&  }|j                  |k(  s|j                  |d        y  y )NT)	dbus_sent)rN  r`  r   r  )rU   ra  remote_identfilesremotesr  s         rW   rW  z&WarpApplication.handle_dbus_send_files  sR    ;;++224 	F|||+!!%4!8	rX   c                    t         j                  j                  |        t        j                  d       t        j                  d       t        j                  j                  dt        j                  z   | j                         t
        j                  j                  d      }t        j                  j                  d|      }| j!                  |       t        j"                         | _        | j$                  j'                          t)        j*                          t(        j,                  j                  d| j.                         t(        j,                  j                  d| j0                         y )NzInitializing WarpinatorrB  z	changed::sznotification-responsez	low-spacezfolder-changed)r   rX  
do_startupr0  r5  r   set_prgnamer   prefs_settingsrH   TRAY_ICON_KEYon_prefs_changedVariantTyper  r   SimpleAction
add_actionSecureModePrefsBlockersecure_mode_enforcerstart_monitorr   initialize_free_space_monitorfree_space_monitorhandle_low_disk_spaceon_receiving_folder_changed)rU   vtactions      rW   rk  zWarpApplication.do_startup  s    ""4(./+,$$[53F3F%FH]H]^!!#&!!%%&=rB$)$@$@$B!!!//1**,''T5O5OP''(8$:Z:Z[rX   c                     t         j                  j                           j                   j                  j	                          y t        j                  d       t                _         j                  j                  d fd        j                  j                  d fd        j                  j                  d fd        j                   j                  j                         t        j                         st        j                         s[ j                  j                  j	                           j                  j                  j                  t        j                                 j                          t!        j"                          _         j$                  j'                           j$                  j                  d j(                          j+                          y )	Nz#UI: Creating window and status iconr:  c                 $    j                         S rZ   	exit_warpwrU   s    rW   r   z-WarpApplication.do_activate.<locals>.<lambda>  s    dnn.> rX   r;  c                 $    j                         S rZ   
new_serverr  s    rW   r   z-WarpApplication.do_activate.<locals>.<lambda>  s    1B rX   rk  c                 :    j                   j                  |      S rZ   )rN  register_with_host)r{   rj  rU   s     rW   r   z-WarpApplication.do_activate.<locals>.<lambda>  s    dkkFdFdeiFj rX   zstate-changed)r   rX  do_activater{  r   r0  r1  r9  rH   
add_windowr   get_start_with_windowr  r  r  #update_status_icon_from_preferencesr  r  r  startnetwork_state_changedr  r   s   `rW   r  zWarpApplication.do_activate  s<   ##D);;"KK;< lF$>?I'BC46jk**+&&(0C0C0EKK##%KK001K1K1MN002$88:OT-G-GHrX   c                 $    | j                          y rZ   r  )rU   r  r  s      rW   r  z%WarpApplication.network_state_changed      rX   c                 n    | j                          t        j                  d| j                        | _        y )NrI  )stop_save_folder_checkr   r3  check_save_folderrL  )rU   rN  s     rW   start_save_folder_checkz'WarpApplication.start_save_folder_check  s)    ##%)-)9)9$@V@V)W&rX   c                 p    | j                   dkD  r't        j                  | j                          d| _         y y r  )rL  r   r  r   s    rW   r  z&WarpApplication.stop_save_folder_check  s1    ))A-t==>-.D* .rX   c                    t        j                         }t         j                  j                  d      }|r|s| j                  s| j
                  j
                  j                         sb| j
                  j
                  j                          | j
                  j
                  j                  t        j                                d| _        |s*| j
                  j                          t        j                  S |s| j
                  j                          t        j                  S d| _        t        j                  | j                          d| _        t        j$                  S r0  )r   verify_save_folderrw  have_enough_freerI  r{  r  r   r  r   r  ru  ry  r   rQ  idle_addnew_server_continuerL  rP  )rU   r  perms_okspace_oks       rW   r  z!WarpApplication.check_save_folder  s    **,**;;A>X??4;;+=+=+I+I+K""'')""44S5O5O5QR"&224 ''' 002'''d../)*&!!!rX   c                    | j                   rt        j                  d       y | j                  rt        j                  d       d| _        y d| _        | j
                  r\| j                  j                  d       | j
                  j                  d| j                         | j
                  j                          y | j                          y )NzETrying to start server while there's a pending app restart. Ignoring.zFTrying to start server while server already starting, will check laterTzshutdown-complete)rM  r0  r1  rG  rQ  rN  r{  r  rH   r  r  r   s    rW   r  zWarpApplication.new_server  s    MMabMMbc&*D##;;KK++D1KK 3T5Q5QRKK  "((*rX   c                 0   d| _         | j                  j                  d       t        j                         | _        t        j                         | _        | j                  j                         | _
        t        j                  d| j                  j                  | j                         | j                  j                  | j                  j                  d      | j                  j                  | j                         | j                  j!                          	 | j"                  j%                  t&               d | _        t)        j*                         }	 t        j,                  j%                  | j.                         |j1                  | j                  | j
                         t        j,                  j3                  d| j.                         t        j4                         r| j                  j7                  d       nEt        j8                  d       t        j8                  d       | j                  j7                  d       | j                  j:                  s7t        j<                  d	       d| _        | j                  jA                          y t#        jB                  | j                  | j
                  | j                        | _        | j"                  j3                  d
| jD                         | j"                  j3                  d| jF                         | j"                  j3                  d| jH                         | j"                  j3                  d| jJ                         | j"                  j3                  d| jL                         y #  Y UxY w#  Y xY w)NF)r   z"New server requested for '%s' (%s)r  zchanged::group-codeTz1Secure mode not enabled, restricting preferences.zD-- See https://github.com/linuxmint/warpinator/blob/master/README.mdzNo network accesszserver-startedzremote-machine-addedzremote-machine-removedzremote-machine-ops-changedzmanual-connect-result)'rQ  r{  r  r   get_portrR  get_auth_portr<  r  get_current_ip_infor  r0  r1  r>  r  r  r  rN  r   try_to_startauthget_singletonrm  on_group_code_changedupdaterH   get_secure_moderD  r  r  r5  rG  r  Server_server_started_remote_added_remote_removed_remote_ops_changed_manual_connect_result)rU   auth_singletons     rW   r  z#WarpApplication.new_server_continue  s   "'''5'9!NN,!&!4!4!6#{{>>@:D<P<P<V<VX\XlXlm**4+?+?+H+H+OQUQeQeQkQkmq  nD  nD  	E!!#	KK**<8 ++-	  33D4N4NO 	d22D4E4EF$$%:D<V<VW  "KK//5LLLMLL_`KK//6{{!!LL,-#(D KK'')mmD$8$8$:K:KTMcMcd,d.B.BC2D4F4FG4d6J6JK8$:R:RS3T5P5PQA		s   N )N NNc                     d| _         | j                  r| j                          y | j                  d       | j                  j                          | j                  r| j                          y y )NFTr  )rG  rQ  r  update_status_icon_online_stater{  r  rH  add_simulated_widgets)rU   local_machines     rW   r  zWarpApplication._server_started#  sY    $""OO,,D,9))+>>&&( rX   c                 0   t        j                  d       | j                  d       | j                  j	                          | j
                  r| j
                  j                          t        j                  j                          | j                          | j                  r| j                          | j                  j                          | j                  j                         rIt        j                  j!                         j#                  d       | j                  j                         rI| j                  j%                          | j                  j'                          t        j                  d       t(        j*                  j-                  |        y )NzBeginning shutdownFr  )	may_blockzShutdown complete)r0  r1  r  r{  rO  r  stopr   rw  r  r  rN  setup_kill_as_a_last_resortis_aliver   MainContextdefault	iterationr6   r   r   rX  do_shutdownr   s    rW   r  zWarpApplication.do_shutdown0  s   *+,,E,:$$&;;KK((*##%;;,,.KK  "
 ++&&(  ((*44u4E ++&&( KK)*##D)rX   c                 B    t        j                  | j                         y rZ   )r   r  quitr   s    rW   r  zWarpApplication.exit_warpN  s    dii rX   c                     t        j                  d       t        j                  d       t	        j
                  dt	        j                         z         y )NzSetting up killr   zkill -9 %s &)r0  r1  r  sleepr4   systemgetpidr   s    rW   r  z+WarpApplication.setup_kill_as_a_last_resortQ  s3     	'(

2
		.299;./rX   c                 $    | j                          y rZ   )r  )rU   settingspspecr  s       rW   ro  z WarpApplication.on_prefs_changedY  s    002rX   c                 $    | j                          y rZ   r  r   s    rW   firewall_script_finishedz(WarpApplication.firewall_script_finished\  r  rX   c                 $    | j                          y rZ   r  )rU   r  r  s      rW   r  z%WarpApplication.on_group_code_changed_  r  rX   c                    t         j                  dk7  r| j                          y d| _        | j                  j                          | j                  r| j                  j                         nd}| j                  j                  |       y )N
bubblewrapTr   )	r7   r  r  rM  r{  r  rN  get_active_op_countr  )rU   monitorr  s      rW   ry  z+WarpApplication.on_receiving_folder_changedb  sa    ,.OO"##%:>++T[[4461
00<rX   c                     | j                   8| j                  s+| j                   j                          | j                          y y y rZ   )rN  rG  cancel_all_opsr  )rU   r  s     rW   rx  z%WarpApplication.handle_low_disk_spacel  s7    ;;"4+?+?KK&&(OO ,@"rX   c                     | j                   j                  |       |j                  d| j                         |j                  d| j                         | j                          y )Nr   r   )r{  r  rH   rebuild_status_icon_menurU   r  r   s      rW   r  zWarpApplication._remote_addedq  sN    %%n55t7T7TU68U8UV%%'rX   c                     |j                   t        j                  k(  r| j                  j	                  |       | j                          y rZ   )rx   r   r  r{  r  r  r  s      rW   r  zWarpApplication._remote_removedw  s4      L$@$@@KK,,^<%%'rX   c                    | j                   j                          | j                  r| j                  j                  d      nd}| j	                          |dkD  rt
        j                  j                          nt
        j                  j                          | j                  r| j                   j                  |       y y )NT)incoming_onlyr   )r{  r  rN  r  update_inhibitor_stater   rw  r  pauserM  r  )rU   r  re   r  s       rW   r  z#WarpApplication._remote_ops_changed}  s    //1LPKKT[[4444H]^
##%>##))+##))+KK44Z@ rX   c                     |sy | j                   j                  r'| j                   j                  j                  ||       y y rZ   )r{  rf  r9  )rU   r{   initiated_herer7  r8  s        rW   r  z&WarpApplication._manual_connect_result  s4    ;;%%KK&&;;FCH &rX   c                 .    dd l }|j                  |        y r  )rS  r  )rU   rS  s     rW   r  z%WarpApplication.add_simulated_widgets  s    %%d+rX   c                 <   d}| j                   j                         }|D ]-  }|j                  D ]  }|j                  t        v sd} n |s- n |r| j
                  dk(  rut        j                  d       | j                  | j                  j                  t        j                  j                  t        j                  j                  z  d      | _        y y | j
                  dkD  r8t        j                  d       | j                  | j
                         d| _        y y )NFTr   z8UI: Inhibiting suspend/logout while transfers are activezHWarpinator is sending or receiving files, or there is a pending transferz9UI: No more active transfers, uninhibiting suspend/logout)rN  r`  r  rx   INHIBIT_STATESrK  r0  r1  inhibitr{  r   ApplicationInhibitFlagsLOGOUTSUSPEND	uninhibit)rU   any_active_opsrh  r   r1   s        rW   r  z&WarpApplication.update_inhibitor_state  s    ++224% 	N$11 99.%)N
 	 ""a'XY&*ll4;;3E3E363N3N3U3UX[XsXsX{X{3{3}'# ( ""Q&YZt223&'# 'rX   c                    t        j                         r| j                  nt        j                  d      | _        | j                  j                  d| j                         | j                  | j                  d u       | j                          | j                          y | j                  3| j                  j                  d       d | _        | j                          y y )Nzorg.x.StatusIcon.warpinator)re   rr  F)r   r  rE  r   
StatusIconrH   on_tray_icon_activater  rN  holdr  r   releaser   s    rW   r  z3WarpApplication.update_status_icon_from_preferences  s     '#'??8U#V   ((T5O5OP44T[[5LM		))++  ,,U3#'  ,rX   c                    | j                   y |r7| j                   j                  d       | j                   j                  d       n6| j                   j                  d       | j                   j                  d       | j                          y )Nzorg.x.Warpinator-symbolicr  zorg.x.Warpinator-error-symbolicr  )rE  set_icon_namerv   r  )rU   r  s     rW   r  z/WarpApplication.update_status_icon_online_state  sr    #**+FG--h7**+LM--i8%%'rX   c                      j                   y t        j                         } j                   j	                  |       t        j
                  t        d            }|j                  dd        |j                  |       t        j
                  t        d            }|j                  d fd       |j                  |       |j                           j                   j                  |       y )Nrs  rl  rr  c                 *    t        j                         S rZ   rZ  )ms    rW   r   z:WarpApplication.rebuild_status_icon_menu.<locals>.<lambda>  s    4+@+@+B rX   rw  c                 $    j                         S rZ   r~  )r   rU   s    rW   r   z:WarpApplication.rebuild_status_icon_menu.<locals>.<lambda>  s    4>>+; rX   )rE  r   r  rN  add_favorite_entriesr  r{   rH   r  r  set_secondary_menu)rU   r   r  r;   s   `   rW   r  z(WarpApplication.rebuild_status_icon_menu  s    #xxz;;"%%d+||!$6"78Z!BC||!F),Z!;<++D1rX   c                    | j                   j                         }d}|rt        |t        j                  t
        j                              }|D ]  }|j                  s|j                  dk7  r|j                  }n|j                  }| j                  ||      }|j                  t        j                  k(  r|dz  }n|j                  d       |j                  |        |dkD  rO|j                  t!        j"                                | j                  t%        d      d       }|j                  |       |dkD  r#|j                  t!        j"                                |j'                          y )Nr   r  r   rk   FzSend to all)rN  r`  r  r  r  r   r  r,  r  r	  create_submenurx   r   r  r  r  r   r  r{   r  )rU   r  remote_listavailable_favoritessorted_machinesmachinere   r;   s           rW   r  z$WarpApplication.add_favorite_entries  s%   kk668$[i6J6J4KdKd6efO* ###++r1&33&77..tW=D~~)<)<<+q0+**51HHTN#" "HHS**,-&&q'7>DHHTN"HHS**,-rX   c                    t        j                  |      }t        j                         }t        j                  st
        rt        j                  j                         j                         dkD  ryt        j                  t        d            }t        j                  j                         j                  d | j                  |      }|j                  |       |j                  |       t        j                  t        d            }t        j                          }|j#                  d| j$                  |       |j                  |       |j                  |       |j                  t        j&                  d             t        j                  t        d      d	      }|j#                  d
| j(                  |       |j                  |       |j                  |       |S )Nrl  r   rk  rm  rn  Tro  rp  rq  rr  )r   r  r  r7   r  r  r   rk  r  r  r{   r  status_icon_favorite_selectedr  r  r   r  rH    status_icon_recent_item_selectedr  r  )	rU   re   r  r;   file_select_menusubitemr  recentsr  s	            rW   r  zWarpApplication.create_submenu  sW   ||$'88: ##(;~~))+;;=A,,q~6 NN668DDT4KmKmovw	##I. $$W-,,q|,..0($*O*OQXYG$W%S224@AAkNDAz4#8#8'BV$)*rX   c                 H    |j                         }| j                  ||       y rZ   )r  %send_status_icon_selection_to_machine)rU   chooserr   r  s       rW   r  z0WarpApplication.status_icon_recent_item_selected   s     %%'223GrX   c                 (    | j                  ||       y rZ   )r  )rU   r  r  r   s       rW   r  z-WarpApplication.status_icon_favorite_selected%  s    223GrX   c                    t        j                  | j                  j                        }|j                         }|t        j
                  j                  k(  r"|j                         }| j                  ||       |j                          y rZ   )
r   r  r{  r  r   r  ACCEPTr!  r  r   )rU   r   r   r"  r#  r$  s         rW   r  z WarpApplication.open_file_picker(  sa    33DKK4F4FGjjl#"")))(H66xPrX   c                 n   |r5t        |t              r|j                  |       y |j                  |g       y | j                  j	                         D ]a  }|j
                  s|j                  t        j                  k(  s.t        |t              r|j                  |       P|j                  |g       c y rZ   )	r   listr  rN  r`  r,  rx   r   r  )rU   r  r   s      rW   r  z5WarpApplication.send_status_icon_selection_to_machine3  s    #t$))#.))3%0"&++"B"B"D 9!**~/D/DH[H[/[!#t,&11#6&113%89rX   c                 :    | j                   j                  |       y rZ   )r{  r  )rU   iconr   r  s       rW   r  z%WarpApplication.on_tray_icon_activateA  s    %%d+rX   r4  rZ   r  )T),r   r   r   r0   rY  r^  rV  rW  rk  r  r  r  r  r  r  r  r  r  r  misc_asyncr  ro  r  r  ry  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   s   @rW   r@  r@  U  s    $8HC\$6X/
"*+&1Rf)*<! 
[[0 03=
((AI,(8(2&!F<H
H	9,rX   r@  c                    dd l }	 t        j                  d   t        _        	 t        |       |j                  |j                  fd       |j                  |j                  fd       j                  t        j                        }j                  rt        j                  }|S # t
        $ r
}Y d }~d }~ww xY w# t        $ r}t!        |       d}Y d }~|S d }~ww xY w)Nr   WARPINATOR_SANDBOX_MODEc                 $    j                         S rZ   r~  rj  fr  s     rW   r   zmain.<locals>.<lambda>O  s    !++- rX   c                 $    j                         S rZ   r~  r  s     rW   r   zmain.<locals>.<lambda>P  s    1;;= rX   rk   )signalr4   environr7   r  KeyErrorr@  SIGINTSIGTERMr  sysargvrM  r  EXIT_CODE_RESTART_BWRAP	Exceptionprint)rS  r  r  r  r  s       @rW   mainr  E  s     jj)BCG$fmm%?@fnn&@AeeCHHo..C
 J!    aJ	s)   B* BC  *	B=8B= 	C!	CC!__main__r4  )Xr4   r  setproctitlelocaler!  r  r   r0  r  rK  r  ior   r   r<  r  girequire_versiongi.repositoryr   r   r   r   r   r	   r
   r7   r   r   rO  rN  r  r  r  r  r   r   r   r   r   r   r  rk  bindtextdomainPACKAGE	localedir
textdomainr{   r  r  r  rM  r  r  r  ry   rz   r  ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   objectr"   r2  r   r9  Windowre  rX  r@  r  r   r:  r    rX   rW   <module>r#     s;   	 
           	   	   5%     65 ! G G G         0 0 : :   NN
   fnnf&6&6 7   v~~v'7'7 8   6>> "OO   , '    ' -/ ''//#	( 3 @ - / "F $& !"I (< %$I !%L "'; $1 $> !"< &Q # L jV jX\(W^^ \(|s sjw5#** w5rm,coo m,`. zCHHTV k9 s   2H H