
    j93                     j   d dl Z d dlZd dlZd dlZd dlmZmZmZmZ e j                  j                   ej                         d      Ze j                  j                  ed      ZdZ ej                  dej                         Z G d dej$                        Z G d	 d
ej(                        Zd ZddZy)    N)GioGLibGObjectGtksticky
notes.json   z\Abackup-[0-9]{10,}\.json$c                   \    e Zd Z ej                  ej
                  j                  eefej                        d        Z
 ej                  ej
                  j                  eeefej                        d        Z ej                  ej
                  j                  eej                        d        Z ej                  ej
                  j                  eej                        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d Zd Zd Zd Z  xZ!S )FileHandler)flagsreturn_type	arg_typesaccumulatorc                      y N self
group_names     /usr/lib/sticky/common.pygroup_changedzFileHandler.group_changed        	    c                      y r   r   )r   old_namenew_names      r   group_name_changedzFileHandler.group_name_changed   r   r   )r   r   r   c                      y r   r   r   s    r   lists_changedzFileHandler.lists_changed        	r   c                      y r   r   r   s    r   savedzFileHandler.saved"   r!   r   c                    t         t        |           || _        || _        d| _        d| _        i | _        t        j                  j                  t              r| j                          | j                  j                  d| j                         | j                  j                  d| j                         | j                          y )Nr   zchanged::automatic-backupszchanged::backup-interval)superr   __init__settingswindowsave_timer_idbackup_timer_idnotes_listsospathexistsCONFIG_PATH
load_notesconnectcheck_backup)r   r'   r(   	__class__s      r   r&   zFileHandler.__init__'   s    k4)+  77>>+&OO:D<M<MN8$:K:KLr   c                     t        t        d      5 }t        j                  |j	                               }d d d        || _        y # 1 sw Y   | _        y xY w)Nr)openr/   jsonloadsreadr+   )r   argsfileinfos       r   r0   zFileHandler.load_notes7   sF    +s# 	+t::diik*D	+  	+  s   $AAc                      | j                   |   S r   )r+   r   s     r   get_note_listzFileHandler.get_note_list=   s    
++r   c                 H    t        | j                  j                               S r   )listr+   keysr   s    r   get_note_group_namesz FileHandler.get_note_group_names@   s    D$$))+,,r   c                 f    || j                   |<   | j                          | j                  d|       y )Nzgroup-changed)r+   
queue_saveemit)r   
notes_listr   s      r   update_note_listzFileHandler.update_note_listC   s*    '1$		/:.r   c                     | j                   dkD  rt        j                  | j                          t        j                  t        | j
                        | _         y Nr   )r)   r   source_removetimeout_add_seconds
SAVE_DELAYsave_note_listr   s    r   rD   zFileHandler.queue_saveJ   s?    !t112!55j$BUBUVr   c                     t        |d      5 }|j                  t        j                  | j                  d             d d d        y # 1 sw Y   y xY w)Nzw+   )indent)r6   writer7   dumpsr+   )r   	file_pathr;   s      r   save_to_filezFileHandler.save_to_fileP   s@    )T" 	?dJJtzz$"2"21=>	? 	? 	?s   1AAc                     d| _         t        j                  j                  t              st        j
                  t               | j                  t               | j                  d       y )Nr   r#   )	r)   r,   r-   r.   
CONFIG_DIRmakedirsrT   r/   rE   r   s    r   rM   zFileHandler.save_note_listT   s@    ww~~j)KK
#+&		'r   c                    | j                   r&t        j                  | j                          d| _         | j                  j	                  d      sy t        t        j                               }| j                  j                  d      }| j                  j                  d      }|dk(  r| j                  j                  d|       |}||dz  z   }||k  r| j                          y t        j                  ||z
  | j                        | _         y )Nr   zautomatic-backupslatest-backupzbackup-intervali  )r*   r   rJ   r'   get_booleaninttimeget_uintset_uintsave_backuprK   )r   r:   nowlast_backupintervalnext_backups         r   r2   zFileHandler.check_backup]   s    t334#$D }}(()<=$))+mm,,_===))*;<! MM""?C8K!X_5#'#;#;K#<MtO_O_#`D r   c                    d| _         t        j                  j                  t              st        j
                  t               t        t        j                               }t        j                  j                  t        d|z        }| j                  |       | j                  j                  d|       | j                  j                  d      }|dkD  rg }t        j                  t              D ])  }t        j                  |      s|j!                  |       + |j#                          |d|  D ]9  }t        j$                  t        j                  j                  t        |             ; | j'                          y )Nr   zbackup-%d.jsonrY   zold-backups-max)r*   r,   r-   r.   rV   rW   r[   r\   joinrT   r'   r^   r]   listdirbackup_file_namesearchappendsortremover2   )r   r:   	timestampr-   backups_keepbackupsr;   s          r   r_   zFileHandler.save_backupv   s    ww~~j)KK
#		$	ww||J(89(DE$	: }}--.?@!G

:. )#**40NN4() LLN<-0 :		"'',,z489: 	r   c                     t        j                  t              D ]O  }t        j	                  |      st        j
                  t         j                  j                  t        |             Q y r   )r,   rf   rV   rg   rh   rk   r-   re   )r   r;   s     r   delete_all_backupszFileHandler.delete_all_backups   sC    JJz* 	:D&&t,		"'',,z489	:r   c                    t        j                  t        d      t         j                  j                  |      }|j                  t        d      t         j                  j                  t        d      t         j                  j                         |j                  t        j                                |j                  d       |j                  d       t        j                         }|j                  d       |j!                  d       |j#                  |       t        j                         }|j                  t        d	             |j!                  d
       |j#                  |       |j%                         }|t         j                  j                  k(  r!|j'                         }| j)                  |       |j+                          y )Nz	Export...titleactiontransient_forCancelSaver   TJSONapplication/json
Plain Text
text/plain)r   FileChooserDialog_FileChooserActionSAVEadd_buttonsResponseTypeCANCELOKset_current_folderr   get_home_dirset_current_nameset_do_overwrite_confirmation
FileFilterset_nameadd_mime_type
add_filterrunget_filenamerT   destroy)r   menuitemr(   file_dialogjson_filtertext_filterresponser;   s           r   export_noteszFileHandler.export_notes   sH   ++!K.I^I^IcIcsyz(S-=-=-D-DaiQTQaQaQdQde&&t'8'8':;$$\211$7nn&V$!!"45{+nn&Q|_-!!,/{+??$s''***++-Dd#r   c                 l   t        j                  t        d      t         j                  j                  | j
                        }|j                  t        d      t         j                  j                  t        d      t         j                  j                         |j                  t        j                                t        j                         }|j                  d       |j                  d       |j!                  |       t        j                         }|j                  t        d             |j                  d       |j!                  |       |j#                         }|t         j                  j                  k(  r$|j%                         }|| j'                  ||       |j)                          y )	Nz	Import...rr   rv   Openrx   ry   rz   r{   )r   r|   r}   r~   OPENr(   r   r   r   r   r   r   r   r   r   r   r   r   r   load_notes_from_pathr   )r   r   r(   r   r   r   r   rS   s           r   import_noteszFileHandler.import_notes   s:   ++!K.I^I^IcIcsws~s~(S-=-=-D-DaiQTQaQaQdQde&&t'8'8':;nn&V$!!"45{+nn&Q|_-!!,/{+??$s''***#002I$)))V<r   c                 >   t        j                  t        d      |      }|j                  t        d      t         j                  j
                         |j                  t        d      d       |j                  t        d      t         j                  j                        }|j                  t         j                  j                         |j                         }t        j                  t         j                  j                        }t        j                         }|j                  t         j                  j                         |j!                  d       |j#                  |       |j%                  |d	d	d
       g }t'        j(                  t*              D ])  }	t,        j/                  |	      s|j1                  |	       + |j3                          t5        |      d
k(  r|j7                  d       |D ]f  }
t9        j:                  t=        |
dd             }t        j>                  t9        j@                  d|      d      }|
|_!        |j#                  |       h |jE                          |jG                         }|t         j                  j                  k(  r_t&        jH                  jK                  t*        |jM                         jO                         jB                        }|(| jQ                  ||       n|dk(  r| jS                          |jU                          y )NzRestore Backup)rs   ru   rv   Clear   Restore)selection_mode   Tr   F   z%c   )labelmargin)+r   Dialogr}   
add_buttonr   r   r   set_default_responseget_content_areaListBoxSelectionModeBROWSEScrolledWindowset_shadow_type
ShadowTypeINset_min_content_heightadd
pack_startr,   rf   rV   rg   rh   ri   rj   lenset_sensitiver\   	localtimer[   Labelstrftimer;   show_allr   r-   re   get_selected_row	get_childr   rp   r   )r   r   r(   dialogrestore_buttoncontentbackup_listscrolled_windowrn   r;   	file_namedater   r   rS   s                  r   restore_backupzFileHandler.restore_backup   sD   !$4"5VL!H+s'7'7'>'>?!G*b)**1Y<9I9I9L9LM##C$4$4$7$78))+kk1B1B1I1IJ,,.''(9(9:..s3K(?D$:JJz* 	%D&&t,t$	% 	w<1((/  	#I>>#i"o"67DIIDMM$$=aHE"EJOOE"		# 	  "::<s''***Z1M1M1O1Y1Y1[1`1`aI$)))V<^##%r   c                    	 t        |d      5 }t        j                  |j                               }d d d        | _        | j                          | j                  d       y # 1 sw Y   2xY w# t        $ rc}t        j                  t        d      t        j                  j                  |      }|j                          |j                          Y d }~y d }~ww xY w)Nr5   lists-changedz3Unable to restore: invalid or corrupted backup file)textbuttonsru   )r6   r7   r8   r9   r+   rM   rE   	Exceptionr   MessageDialogr}   ButtonsTypeCLOSEr   r   )r   r-   r(   r;   r<   emessages          r   r   z FileHandler.load_notes_from_path   s    	dC /Dzz$))+./  $D!IIo&/ /  	''Q/d-e030E0EU[]GKKMOO		s.   A/ $A#0A/ #A,(A/ /	C8ACCc                     | j                   dkD  rt        j                  | j                          | j                          y rI   )r)   r   rJ   rM   r   s    r   flushzFileHandler.flush  s0    !t112r   c                     || j                   v r-t        t        d      t        d      |z  | j                        syg | j                   |<   | j	                          | j                  d       y)NzOverwrite Existing GroupzTThere is already a group named '%s'. This action will overwrite it. Continue anyway?Fr   T)r+   confirmr}   r(   rM   rE   r   s     r   	new_groupzFileHandler.new_group
  s    )))178!  =S  ;T  Wa  ;a  cg  cn  cn  o')$		/"r   c                     t        t        d      t        d      |z  | j                        sy || j                  vrt	        d|z        | j                  |= | j                          | j                  d       y )NzRemove Groupz-Are you sure you want to remove the group %s?zinvalid group name %sr   )r   r}   r(   r+   
ValueErrorrM   rE   r   s     r   remove_groupzFileHandler.remove_group  sn    q(!,[*\_i*ikokvkvwT---4zABBZ(		/"r   c                     | j                   j                  |      | j                   |<   | j                          | j                  d||       y )Nzgroup-name-changed)r+   poprM   rE   )r   	old_groupr   s      r   change_group_namezFileHandler.change_group_name!  s@    &*&6&6&:&:9&E#		&	9=r   )"__name__
__module____qualname__r   SignalSignalFlagsRUN_LASTboolstrsignal_accumulator_true_handledr   r   r    r#   r&   r0   r>   rB   rG   rD   rT   rM   r2   r_   rp   r   r   r   r   r   r   r   r   __classcell__r3   s   @r   r   r      sW   W^^'--66D"f ' G GII W^^'--66D"Cj ' G GII W^^'--66D ' G GII W^^'--66D ' G GII  ,-/W?a24:
0.,\$
	#>r   r   c                   8     e Zd Zd fd	Zd Zd Zd Zd Z xZS )HoverBoxc                     t         t        |           || j                  |       d| _        | j                  d| j                         | j                  d| j                         y )NFzenter-notify-eventzleave-notify-event)r%   r   r&   set_child_widget	inhibitedr1   set_child_widget_visibility)r   widgetr3   s     r   r&   zHoverBox.__init__(  sU    h&(!!&))4+K+KL)4+K+KLr   c                 T    || _         |j                  d       |j                          y NT)child_widgetset_no_show_allhide)r   r   s     r   r   zHoverBox.set_child_widget2  s!    "t$r   c                 2    d| _         | j                          y r   r   r   r   s    r   disablezHoverBox.disable7  s    ((*r   c                 2    d| _         | j                          y )NFr   r   s    r   enablezHoverBox.enable;  s    ((*r   c                 n   | j                         j                         j                         j                         d   }|| j	                         k(  xs  || j	                         j                         v }| j                  s|r| j                  j                          y | j                  j                          y rI   )
get_displayget_default_seatget_pointerget_window_at_position
get_windowget_childrenr   r   showr   )r   r:   pointer_window	has_mouses       r   r   z$HoverBox.set_child_widget_visibility?  s    ))+<<>JJLccefgh"doo&77m>T__M^MkMkMm;m	~~)""$""$r   r   )	r   r   r   r&   r   r   r   r   r   r   s   @r   r   r   '  s    M
++%r   r   c                 F   t        j                  | |t         j                  j                        }|j	                  t        d      t         j                  j                         |j	                  t        d      t         j                  j                         |j                  t         j                  j                         |j                         }d|j                  _        d|j                  _        |j                  t        j                  |      ddd       t        j                   d	      }|j                  |ddd       |j#                          |j%                         }|j'                         }|j)                          |t         j                  j                  k(  |fS )
Nrs   ru   window_positionrv   r   r   r   F
   T)activates_default)r   r   WindowPositionCENTERr   r}   r   r   r   r   r   propsmargin_leftmargin_rightr   r   Entryr   r   get_textr   )rs   r   r(   r   r   entryr   values           r   promptr  H  s(   ZZe63K]K]KdKdeF
ak3#3#3#:#:;
ags//223
 0 0 3 34%%'G "GMM!#GMMsyyw/rBII-EueUB/zz|HNNE
NNs''***E11r   c                    t        j                  | ||t         j                  j                  nt         j                  j                        }|j                  t        d      t         j                  j                         |j                  t        d      t         j                  j                         |j                  t         j                  j                         |j                         }d|j                  _        d|j                  _        |j                  t        j                   |      ddd       |t         j"                  j%                  t        d            }|j                  |ddd	       t&        j(                  j*                  }	|r|	t&        j(                  j,                  z  }	|j/                  ||d
|	       |j1                          |j3                         }
|j5                          |
t         j                  j                  k(  S )Nr   NoYesr   r  Fr  zDon't ask me againr   active)r   r   r  r  CENTER_ON_PARENTr   r}   r   NOYESr   r   r  r  r	  r   r   CheckButtonnew_with_labelr   SettingsBindFlagsDEFAULTINVERT_BOOLEANbindr   r   r   )rs   r   r(   r'   disable_keydisable_invertedr   r   disable_checkboxr   r   s              r   r   r   _  s~   ZZe66<n++22#J\J\JmJmpF
ags//223
ah 0 0 4 45
 0 0 4 45%%'G "GMM!#GMMsyyw/rB??99!<P:QR+UE1=%%--S**999Ek#3XuEzz|H
NNs''++++r   )NNNF)r,   r7   r\   regi.repositoryr   r   r   r   r-   re   get_user_config_dirrV   r/   rL   compile
IGNORECASErg   Objectr   EventBoxr   r  r   r   r   r   <module>r&     s    
   	 1 1WW\\2$224h?
ggll:|4
2::;R]]K U>'.. U>n%s|| %B2.,r   