
    l
j`                     d   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
mZmZmZmZ d dlmZmZmZmZmZmZmZ d dl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 ej                  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/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8 ejr                  e"      Z:dZ;dZ<d Z=d!Z> e	e j~                  j                   ej                         d            ZB e	e j~                  j                  eBe>            Z?d" ZC	  ej                         ZEeEj                  e?j                         ej                  j                         	 eEj                  e;e<      ZKeKdk(  seKd#k(  r  eLeK      d$k  r ej                  d%       	 eEj                  e;e=      ZN eLeNj                  d&            d'k(  r 	 e:j                  e6eK       e:j                  e7eN       e?j                          	 e?j                  j                          e:j                  e+      e:j                  e,      k(  r$e:j                  e,e:j                  e+      d*z          e:j                  e6      ZKeKd#k(  re:j                  e6e8       e:j                  e7      ZNeNd#k(  re:j                  e7 eC              e:j                          d+ Z]d, Z^d- Z_d. Z`d/ Zad0 Zbd1 Zcd2 Zdd3 Zed4 Zfd5 Zgd6 Zhd7 Zid8 Zjd9 Zkd: Zld; Zmd< Znd= Zod> Zpd? Zqd@ ZrdA ZsdB Zt G dC dD      Zu G dE dF      Zv G dG dHe      Zw G dI dJe      Zxy#  e8ZKY xY w#   eC       ZNY xY w# eTeUf$ r)  ej                  d( eVe?j                        z         Y gw xY w# ej                  $ r&ZX ej                  d) eVeX      z         Y dZX[XdZX[Xww xY w)K    N)Path)GSettingsSwitchGSettingsFileChooserGSettingsComboBoxGSettingsSpinButton)SettingsWidgetSettingsPageSettingsStack
SpinButtonEntryButtonComboBox)GtkGdkGioGLibzorg.x.warpinator.preferenceszreceiving-folderzstart-with-window	autostartzask-for-send-permissionzno-overwritezkeep-permissionszpreserve-timestampzpreferred-network-ifaceportzreg-portzshow-notifications	favoriteszuse-tray-iconzserver-thread-pool-sizezrpc-thread-pool-sizezuse-compressionzzlib-compression-levelztransfer-block-sizezminimum-free-spacez
group-codez
connect-id
Warpinator	schema_id
warpinatorcode
connect_idz.groupc                      t        j                         j                         d d dt        j                  d      j                         S )N*   -
   )utilget_hostnameuppersecrets	token_hex      /usr/libexec/warpinator/prefs.pyget_new_connect_idr(   >   s:    '')//1#268I8I"8M8S8S8UVVr&       zAGroup Code is short, consider something longer than 8 characters.r      zbCould not remove obsolete group code file and directory at '%s' - maybe the directory isn't empty?zlMigration failed - either migration already happened, or there was nothing to migrate in the first place: %s   c                  4    t         j                  t              S N)prefs_settingsget_booleanAUTOSTART_KEYr%   r&   r'   get_should_autostartr2   v       %%m44r&   c                  4    t         j                  t              S r.   )r/   
get_string	NET_IFACEr%   r&   r'   get_preferred_ifacer7   y   s    $$Y//r&   c                  4    t         j                  t              S r.   )r/   get_intPORT_KEYr%   r&   r'   get_portr;   |   s    !!(++r&   c                  4    t         j                  t              S r.   )r/   r9   REG_PORT_KEYr%   r&   r'   get_auth_portr>      s    !!,//r&   c                  h   t         j                  t              dk(  rt        j                  d       t        j                  t
        j                  j                        } | st        j                         } t        j                  j                  t        j                  j                  | d            }	 t        j                   |j#                         d       t        j                  d|j#                         z         t         j'                  t        |j)                                t         j+                          t         j                  t              }|S #  t        j                  j                  t        j                               }t        j$                  d|j#                         z         Y xY w)Nr)   zNo save location setr   T)exist_okz$Created default save directory: '%s'z4Could not create default save directory - using '%s')r/   r5   FOLDER_NAME_KEYlogginginfor   get_user_special_dirUserDirectoryDIRECTORY_DOWNLOADget_home_dirr   Filenew_for_pathospathjoinmakedirsget_pathwarning
set_stringget_urisync)parentdefaulturis      r'   get_save_urirV      s%     1R7+,**4+=+=+P+PQ&&(F((''V\(JK	iKK((*T:LL?'BRBRBTTU
 	!!/7??3DE

#
#O
4CJ	ihh++D,=,=,?@GOORU\UeUeUgghs   4AE AF1c                  l    t         j                  j                  t                     j	                         S r.   )r   rH   new_for_urirV   rN   r%   r&   r'   get_save_pathrY      s"    88/88::r&   c                  4    t         j                  t              S r.   )r/   r0   TRAY_ICON_KEYr%   r&   r'   use_tray_iconr\      r3   r&   c                  4    t         j                  t              S r.   )r/   r0   START_WITH_WINDOW_KEYr%   r&   r'   get_start_with_windowr_      s    %%&;<<r&   c                  4    t         j                  t              S r.   )r/   r0   ASK_PERMISSION_KEYr%   r&   r'   require_permission_for_transferrb      s    %%&899r&   c                  4    t         j                  t              S r.   )r/   r0   NO_OVERWRITE_KEYr%   r&   r'   prevent_overwritingre      s    %%&677r&   c                  4    t         j                  t              S r.   )r/   r0   KEEP_PERMISSIONS_KEYr%   r&   r'   preserve_permissionsrh      s    %%&:;;r&   c                  4    t         j                  t              S r.   )r/   r0   PRESERVE_TIMESTAMP_KEYr%   r&   r'   preserve_timestamprk          %%&<==r&   c                  4    t         j                  t              S r.   )r/   r0   SHOW_NOTIFICATIONS_KEYr%   r&   r'   get_show_notificationsro      rl   r&   c                 8    | t         j                  t              v S r.   )r/   get_strvFAVORITES_KEY)idents    r'   get_is_favoritert      s    N++M:::r&   c                     t         j                  t              }| |v r|j                  |        n|j	                  |        t         j                  t        |       y r.   )r/   rq   rr   removeappendset_strv)rs   favess     r'   toggle_favoriterz      sA    ##M2E~UUM51r&   c                      t         j                  t              } | dk(  r!t        dt	        j
                         dz         } | dk  rd} | S )Nr      r*   )r/   r9   RPC_THREAD_POOL_SIZE_KEYmaxrJ   	cpu_countsetting_values    r'   get_remote_pool_max_threadsr      sE    "**+CDMAr||~12qr&   c                  L    t         j                  t              } t        | d      S )N   )r/   r9   SERVER_THREAD_POOL_SIZE_KEYr~   r   s    r'   get_server_pool_max_threadsr      s     "**+FGM}a  r&   c                  4    t         j                  t              S r.   )r/   r0   USE_COMPRESSION_KEYr%   r&   r'   use_compressionr      s    %%&9::r&   c                      t         j                  t              } | t        dd      v r| S t	        j
                  d       y)Nr   zDCompression setting out of range (must be -1 thru 9), using default.)r/   r9   COMPRESSION_LEVEL_KEYrangerB   rO   )levels    r'   get_compression_levelr      s7    ""#89Eb%  OOZ[r&   c                  :    t         j                  t              dz  S )N   )r/   r9   BLOCK_SIZE_KEYr%   r&   r'   get_block_sizer      s    !!.1D88r&   c                  4    t         j                  t              S r.   )r/   get_uintMIN_FREE_SPACE_KEYr%   r&   r'   get_min_free_spacer      s    ""#566r&   c                  4    t         j                  t              S r.   )r/   r5   GROUP_CODE_KEYr%   r&   r'   get_group_coder          $$^44r&   c                  $    t               t        k7  S r.   )r   DEFAULT_GROUP_CODEr%   r&   r'   get_secure_moder      s    111r&   c                  4    t         j                  t              S r.   )r/   r5   CONNECT_ID_KEYr%   r&   r'   get_connect_idr      r   r&   c                        e Zd Zd ZddZd Zy)SecureModePrefsBlockerc                     d| _         t        j                  t              | _        | j                  j                          d| _        | j                          y )NFr   r   )activer   SettingsPREFS_SCHEMAblocker_settingsdelaysettings_changed_id_enforce_settingsselfs    r'   __init__zSecureModePrefsBlocker.__init__   s@     #| D##%#$  r&   Nc                 "   t               t        k7  ry | j                  dkD  r%| j                  j	                  | j                         | j                  j                  t        d       | j                  j                  t        d       | j                  j                  t        d       | j                  j                          | j                  j                          | j                  dkD  r&| j                  j                  | j                         y y Nr   FT)r   r   r   r   handler_blockset_booleanr1   ra   rd   applyrR   handler_unblockr   settingskeys      r'   r   z(SecureModePrefsBlocker._enforce_settings   s    11##a'!!//0H0HI))-?))*<dC))*:DA##%""$##a'!!11$2J2JK (r&   c                 Z    | j                   j                  d| j                        | _        y )Nchanged)r   connectr   r   r   s    r'   start_monitorz$SecureModePrefsBlocker.start_monitor  s#    #'#8#8#@#@DLbLb#c r&   )NN)__name__
__module____qualname__r   r   r   r%   r&   r'   r   r      s    !L dr&   r   c                   X    e Zd Zd Zd Zd Zd	dZd	dZej                  d        Z
d Zy)
Preferencesc           
         t         j                  j                  t        j                  j                  t        j                  d            | _        | j                  j                  d      | _
        | j                  j                  d      | _        | j                  j                  d      | _        | j                  j                  t        d             | j                  j                  d       | j                  j!                  |       t         j"                  j%                  t         j&                  j(                        }t+               }| j                  j-                  |ddd	       | j                  j/                  |       t0        j3                  d
| j4                         g | _        t9               }|j;                  |dt        d             |j=                  t        d            }t?        t        d      t@        tB              }|jE                  |       t?        t        d      t@        tF              }|jI                  |t@        tB               t?        t        d      t@        tJ              }| j6                  jM                  |       |jE                  |       |j=                  t        d            }t?        t        d      t@        tN        t        d            }|jE                  |       tQ        t        d      t@        tR        |d      }|jE                  |       tU        t        d      t@        tV        ddtX        jZ                        }|jE                  |       t?        t        d      t@        t\              }| j6                  jM                  |       |jE                  |       t?        t        d      t@        t^              }| j6                  jM                  |       |jE                  |       t?        t        d      t@        t`              }|jE                  |       t9               }|j;                  |dt        d             |j=                  t        d             }t         j"                  j%                  t         j&                  jb                        }t         j"                  j%                  t         j&                  jd                        }	tg        |dk(  !      }|jE                  |       |j=                  t        d"            }g }
|
jM                  d#t        d$      f       ti               }|d#k(  xs d%}g }	 tk        jl                  g d&tj        jn                  '      jq                  d(      }ts        jt                  d)d*|      }ts        jt                  d+d,|      }ts        jt                  d-d.|      }tw        jx                  |      }fd/t{        j|                         j                         }g }|D ]:  }i }|j                  |d0<    |j                  |      |d1<   |jM                  |       < |D ]b  }|d0   }	 |d1   }||k(  rd}|9|d2k7  r4|d3|}t        |      d4kD  r	|d d5 d6z   }n|}|
jM                  ||f       P|
jM                  ||f       d |s/|
jM                  ti               t        d7      ti               z  f       t        t        d8      |
t        9      | _E        | j                  j                  j                  | j                  j                  ti                         | j                  j                  j                  d%       |jE                  | j                         t        t        d:      d;d<d=d>|||	?      | _L        |jE                  | j                         t        t        d@      d;d<d=d>|||	?      | _M        |jE                  | j                         | j                  j                  j                  t                      | j                  j                  j                  t                      t        j                  t@        A      | _S        | j                  j                  j3                  dB| j                         | j                  j                  j3                  dB| j                         | j                  j                  j3                  dC| j                        | _U        t        t        dD      | j                        | _X        | j                  j                  j                  d%       | j                  j                  j                         j                  dE       |jE                  | j                         t               }t        j                  r}tY        j                  dF      rht        j                  t        dG      t         j                  j                  H      }|j3                  dI| j                         |j                  |d%d%d	       t        j                  t         j                  jb                  J      }|j-                  |ddd	       |j-                  | j                  j                  dK      d%d%d	       t        j                  ddLt        dM      N      }|j-                  |d%d%d	       |jE                  |       | j5                  d d        | j                  j                          |j                  |t         j                  j                  O       y #  Y jxY w# t        $ r d2}Y w xY w)PNzprefs-window.uiprefs_windowcontent_boxpage_switcherzWarpinator Preferences)titlezpreferences-systemTr   changed::group-codegeneralGeneralDesktopz%Show an icon in the notification areazStart with main window openzStart automaticallyzFile TransferszUse compression when possible.zPWarning: This may have a negative impact on performance on some faster networks.)tooltipzLocation for received files)
size_group
dir_selectzReserved free spaceMB   )unitsminimaxiz'Require approval before accepting filesz0Require approval when files would be overwrittenzFDisplay a notification when someone sends (or tries to send) you filesnetwork
Connectionz
Group Code)focus_entryNetworkauto	AutomaticF)lshwz-classr   z	-sanitizez-json)stderrzutf-8z\A\s*{z[{z}\s*{z}, {z	}\s*\\n\Zz}]
c                     |D ]  }	 |d   }	 |d   }|| k(  r|c S  y# t         $ r d}Y w xY w# t         $ r9 	 |d   } | |      }|dk7  r|cY c S |dk7  r|cY c S n# t         $ r Y Y gw xY wY mw xY w)Nproductr)   logicalnamechildren)KeyError)ifacenodeentryentry_productentry_ifacer   namelookup_names          r'   r   z)Preferences.__init__.<locals>.lookup_namew  s     !'$))$4M!"'"6K"e+,, !0 +   '$&M'   
!	!#(#4*5(;2:#'K*b0#00 1# ! ! 1
!sP   0--	A2AA2AA2A2	A,(A2+A,,A21A2r   r   r)   z - 2   /   z...z%s - not foundzNetwork interface to use)valtypezIncoming port for transfersr   i  r,   r   )r   r   steppager   entry_size_groupbutton_size_groupzIncoming port for registrationr   zvalue-changedr   zApply network changessuggested-actionufwzUpdate firewall rules)labelvalignclicked)orientationport_help_headingg        zAny port numbers will work for the application, but using the same ports for all computers can make it simpler to add firewall exceptions if necessary.)wrapxalignr   )
transition)jr   Buildernew_from_filerJ   rK   rL   config
pkgdatadirbuilder
get_objectwindowr   r   	set_title_set_icon_nameset_transient_for	SizeGroupnewSizeGroupMode
HORIZONTALr
   
pack_start	set_stackr/   r   on_group_code_changedunsafe_optionsr	   
add_titledadd_sectionr   r   r[   add_rowr^   add_reveal_rowr1   rw   r   r   rA   r   r   r   MAXUINTra   rd   rn   VERTICALBOTHGroupCodeEntryr7   
subprocesscheck_outputDEVNULLdecoderesubjsonloadsnetworkmonitorget_network_monitorget_valid_interface_infosr   r   lenr   striface_combocontent_widgetset_active_iter
option_mapr   set_line_wrapPortSpinButton	main_port	auth_port	set_valuer;   r>   r   r   r   net_values_changediface_combo_idr   apply_net_settingsport_buttonset_sensitiveget_style_context	add_classr   include_firewall_modfind_program_in_pathAlignCENTER	open_portpack_endBoxOrientationLabelshow_allset_visible_child_fullStackTransitionTypeNONE)r   main_window	page_namer   
page_stackr   sectionwidgetr   r   optionscurrentcurrent_selection_existsjlshw_out	available
valid_inforC   itemdevr   desc
orig_labelr   buttonboxr   s                             @r'   r   zPreferences.__init__  s   {{00f>O>OQb1cdll--n=<<22=A!\\44_EA&>$?@!!"67%%k2]]&&s'8'8'C'CD
"_
##JdA>$$Z04d6P6PQ  ~dIq|<""1Y<0 #J!K/;]L #@!A!-/DF 	v|]C #8!9!-}>""6*""1%5#67 #C!D!-/B)*+})~@ 	%a(E&F&2O1;N 	$Q'<%=%13ETX[bfbnbnp 	 #L!M!-/AC""6* #U!V!-/?A""6* #k!l!-/EG~dIq?""1\?3==,,S->->-G-GHMM--c.?.?.D.DEi9.DE""1Y<0+/0%'#*f#4#=  
	!../b6@6H6H006w  vvix8Hvvh9HvvlFH=H

8$A	6 #668RRT	
 	$DD"&**D)$**a8DOd#		$  	/C&E9~ +/(DBJ*/6
z?R'&sOe3E&Eu~.u~.)	/, (NN/115E3FI\I^3^_`#A&@$A$+,/1 	''778H8H8S8STgTi8jk,,U3(()'*G(H-1AB3=9I:K	M
 	''*J(K-1AB3=9I:K	M
 	'%%//
;%%//@|<%%--ot?V?VW%%--ot?V?VW"..==EEiQUQhQhi!!$;"<d>U>UV''55e<''99;EEFXY(()!&&4+D+DU+KZZa(?&@IYIYZFNN9dnn5OOFE5!4gg#//":":;#tT1- 	t||../BCUESTU		tCq :@ 8A B 	ueUA.""4.)))@W@W@\@\)]}	V  s   Bl; 	m;m mmc                 X    t        j                  d| j                  j                         y )Ni  )r   timeout_addr   destroyr   s    r'   rP  zPreferences.destroy  s    t{{223r&   c                     | j                  | j                  j                  t              | j                  j                  t                     y r.   )run_port_scriptr   r9   r:   r=   )r   r@  s     r'   r3  zPreferences.open_port  s1    T]]228<dmm>S>ST`>abr&   Nc                 V   | j                   j                  j                         }| j                  j                  j                         }d }| j                  j                  j                         }|| j                  j                  |   d   }|t               k(  r@|t               k(  r3|t               k(  r&| j                  j                  j                  d       y ||k(  r&| j                  j                  j                  d       y | j                  j                  j                  d       y r   )r%  r   	get_valuer&  r  get_active_itermodelr;   r>   r7   r+  r,  )r   r@  datamain_widget_valueauth_widget_valueiface_widget_value	tree_iters          r'   r(  zPreferences.net_values_changed  s     NN99CCE NN99CCE!$$33CCE	 !%!1!1!7!7	!B1!E
*
}
.
 3 5
5++99%@!22++99%@''55d;r&   c                    | j                   j                          | j                   j                  t        | j                  j
                  j                                | j                   j                  t        | j                  j
                  j                                d }| j                  j
                  j                         }|| j                  j                  |   d   }|d}| j                  j
                  j                  | j                         | j                  j
                  j                  | j                  j                  t!                         | j                  j
                  j#                  d| j$                        | _        | j                   j'                  t(        |       | j*                  j
                  j-                  d       | j                   j/                          y )Nr   r   r   F)r   r   set_intr:   r%  r   rT  r=   r&  r  rU  rV  
disconnectr)  r!  r"  r7   r   r(  rP   r6   r+  r,  r   )r   r@  rW  rZ  r[  s        r'   r*  zPreferences.apply_net_settings  sd   h(E(E(O(O(QRlDNN,I,I,S,S,UV!$$33CCE	 !%!1!1!7!7	!B1!E%!'++66t7J7JK++;;D<L<L<W<WXkXm<no"&"2"2"A"A"I"I)UYUlUl"mD  ,>?''55e<r&   c                     t         j                  j                  t        j                  dd      }t        j                  d|t        |      t        |      g       t        j                  dd        y )Nfirewallz
ufw-modifypkexecr,   c                  Z    t         j                  j                         j                         S r.   )r   Applicationget_defaultfirewall_script_finishedr%   r&   r'   <lambda>z-Preferences.run_port_script.<locals>.<lambda>,  s    COO,G,G,I,b,b,d r&   )
rJ   rK   rL   r   
libexecdirr  runr  r   timeout_add_seconds)r   r   r&  commands       r'   rR  zPreferences.run_port_script'  sL    '',,v00*lK'3t9c)nEF  $der&   c                     t                }| j                  D ]R  }|r,|j                  d       |j                  t	        d             1|j                  d       |j                  d        T y )NFzOnly available in secure mode.T)r   r	  r,  set_tooltip_textr   )r   r   r   is_default_coder@  s        r'   r  z!Preferences.on_group_code_changed.  sc    -//)) 	.F$$U+''*J(KL$$T*''-	.r&   r.   )r   r   r   r   rP  r3  r(  r*  misc_asyncrR  r  r%   r&   r'   r   r     s>    e^N4c<*0 
[[f f	.r&   r   c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )r$  c                     |j                  d      }|j                  d      }t        t        |   |i | |j	                  | j
                         y )Nr   r   )popsuperr$  r   
add_widgetr   )r   argskargsr   r   	__class__s        r'   r   zPortSpinButton.__init__:  sK    !II&9: 99%78nd,d<e<##D$7$78r&   c                      y r.   r%   r   s    r'   	get_rangezPortSpinButton.get_rangeB  s    r&   c                      y r.   r%   )r   values     r'   r'  zPortSpinButton.set_valueE      r&   c                      y r.   r%   r   s    r'   rT  zPortSpinButton.get_valueH  r|  r&   c                      y r.   r%   )r   ru  s     r'   apply_laterzPortSpinButton.apply_laterK  r|  r&   )	r   r   r   r   ry  r'  rT  r  __classcell__rw  s   @r'   r$  r$  9  s    9r&   r$  c                   <     e Zd Zd fd	ZddZddZd Zd Z xZS )r  c                    t         t        |           t               | _        t
        j                  d| j                         t        j                  j                  t        j                  j                  t        j                  d            | _        | j                   j#                  d      | _        | j'                  | j$                  ddd       | j                   j#                  d      | _        |r| j(                  j                  dd        | j                   j#                  d	      | _        | j                   j#                  d
      | _        | j                   j#                  d      | _        | j                   j#                  d      | _        | j                   j#                  d      | _        | j(                  j5                  | j                         | j(                  j                  d| j6                         | j*                  j9                  d       | j*                  j;                         j=                  d       | j*                  j                  d| j>                         | j;                         }|jA                  d      \  }| _!        |s4tE        jF                         | _!        | jB                  jI                  d       |jA                  d      \  }| _%        |s4tE        jF                         | _%        | jJ                  jI                  d       | j2                  j                  d| jL                         | j                  d d        y )Nr   zgroup-code.uitoplevelTr   
code_entryrealizec                 "    | j                         S r.   )
grab_focus)ws    r'   rf  z)GroupCodeEntry.__init__.<locals>.<lambda>]  s    ALLN r&   set_code_buttonmore_info_link_buttonsecure_mode_labelreason_label
status_barr   Fr   r   success_colorgreenerror_colorreddraw)'rs  r  r   r   r   r/   r   r  r   r   r   rJ   rK   rL   r   r   r   r   r  r  r   r  r  r  r  r  set_texttext_changedr,  r-  r.  set_code_clickedlookup_colorsecure_colorr   RGBAparseinsecure_colorstatus_bar_draw)r   r   contextretrw  s       r'   r   zGroupCodeEntry.__init__O  s\   nd,."$	4d6P6PQ{{00f>O>OQ`1ab//
;tT15\\,,\:
JJy*BC#||667HI%)\\%<%<=T%U"!%!8!89L!M LL33NC,,11,?

DII&

9d&7&78**51..0::;MN$$Y0E0EF((*!(!5!5o!FT #
D##G,#*#7#7#F T "%((*D%%e,(<(<=""4.r&   c                    |j                         }|dk(  ry|j                  t        j                  j                  d       |j                  t        j                  j                  t        d             | j                  j                  d       y t        |      dk  ry|j                  t        j                  j                  d       |j                  t        j                  j                  t        d             | j                  j                  d       y |j                  t        j                  j                  d        | j                  j                  |j                         | j                  k7         y )Nr)   zxsi-dialog-error-symboliczA group code is required.Fr*   zThe group code is too short.)get_textset_icon_from_icon_namer   EntryIconPosition	SECONDARYset_icon_tooltip_textr   r  r,  r  r   )r   r@  rW  texts       r'   r  zGroupCodeEntry.text_changed|  s    2:**3+@+@+J+JLgh(()>)>)H)H!LgJhi  ..u5Y]**3+@+@+J+JLgh(()>)>)H)H!LjJkl  ..u5**3+@+@+J+JDQ**6??+<		+IJr&   c                     | j                   j                         | _        | j                  j	                  d       t
        j                  t        | j                         y )NF)r   r  r   r  r,  r/   rP   r   )r   r@  rW  s      r'   r  zGroupCodeEntry.set_code_clicked  s>    JJ'')	**51!!.$))<r&   c                    t               r| j                  }n| j                  }| j                         }|j	                  t
        j                         |j                          t        j                  ||       |j                  dd|j                  |j                         |j                          |j                          y)Nr   T)r   r  r  get_allocationset_antialiascairoANTIALIAS_SUBPIXELsaver   cairo_set_source_rgba	rectanglewidthheightfillrestore)r   r@  crcolor
allocations        r'   r  zGroupCodeEntry.status_bar_draw  s    %%E''E((*

112
	!!"e,
Q:++Z->->?
	


r&   c                 :   t               rI| j                  j                  t        d             | j                  j                  t        d             y | j                  j                  t        d             | j                  j                  t        d             y )NONzAll options are unlocked.OFFz\You must set a custom group code to run in secure mode. Some options are currently disabled.)r   r  r  r   r  r   s      r'   r  z$GroupCodeEntry.on_group_code_changed  su    ""++AdG4&&q)D'EF""++AeH5&&q  *H  (I  Jr&   )Fr.   )	r   r   r   r   r  r  r  r  r  r  s   @r'   r  r  N  s    +/ZK$=
&Jr&   r  )yrJ   gettextr  rB   r  r  r#   r  pathlibr   xapp.GSettingsWidgetsr   r   r   r   xapp.SettingsWidgetsr   r	   r
   r   r   r   r   gi.repositoryr   r   r   r   r   authr    rn  r  r   r   rA   r^   r1   ra   rd   rg   rj   r6   r:   r=   rn   rr   r[   r   r}   r   r   r   r   r   r   r   r   r/   KEYFILE_GROUP_NAMEKEYFILE_CODE_KEYKEYFILE_UUID_KEYCONFIG_FILE_NAMErK   rL   get_user_config_dirCONFIG_FOLDERr(   KeyFilekeyfileload_from_fileas_posixKeyFileFlagsr;  r5   r   r  warnr   splitrP   unlinkrS   rmdirOSErrorFileNotFoundErrorr  Erroredebugr9   r]  rR   r2   r7   r;   r>   rV   rY   r\   r_   rb   re   rh   rk   ro   rt   rz   r   r   r   r   r   r   r   r   r   r   r   r$  r  r%   r&   r'   <module>r     s4   
     	    o o q q q - -     OO-$+ . ! ) - 
#	- 7 1 ' 0 &) ! 5 "    RWW\\":$":":"<lKLBGGLL(89:W"KdllnG4==?D,=,=,B,BC	"!!"46FG4<42:t9q=GLL\]*''(:<LM
z$%* + nd3nj9KKMN (#~'='=l'KK<)?)?)IA)MN  02:n.@A&&~6
n.@.BC    50,00;5=:8<>>;2	!
;97525
d dBk. k.Z	Z *^J^ ^JC"!* ()
 &' Ny|  AE  AL  AL  }M  M  	NNzz KGMM  A  DG  HI  DJ  J  K  KKsa   AM: :L. -L8 ?5M: 5M .L52M: 8	MM: ,M73M: 6M77M: :N/	N**N/