
    {g;                     V   d dl Z d dl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ZdZ ej"                  ee        e j"                  ee        e j$                  e       e j                   Z ed      Zd dlZ ej*                  ej,                  ej.                         d dlZ ej2                  d	d      Zesej6                  Zn ee      Z ej:                  e
        ej<                  e      Z  ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       ed      gZ! G d de"      Z#dZ$ ejJ                         Z&e&jO                  e$       ejP                  jS                         Z*ejV                  jY                  e*e&d        G d  d!e#e	j                  ejZ                  ej\                        Z/y)"    NGtkz3.0Nemo)r   GObjectGioGLibr   Gdk	GdkPixbuffolder-color-switcherz/usr/share/localezTAllows you to change folder colors from the context menu under supported icon themesLOG_FOLDER_COLOR_SWITCHER)levelAquaBeigeBlackBlueBrownCyanGreenGreyNavyOrangePinkPurpleRedSandTealWhiteYellowc                   *   e Zd Zg dg dg ddZddddd	d
ddZ ej                  ej                  j                        d ej                  ej                  j                        d ej                  ej                  j                        d ej                  ej                  j                        d ej                  ej                  j                        d ej                  ej                  j                        d ej                  ej                  j                        d ej                  ej                  j                        d ej                          di	Zd Zd&dZd'dZed(d       Zd Zed        Zd Zd Zdeded ed!ed"ef
d#Zd$ Zy%))ChangeFolderColorBase)       0   @   `         )   r'   r    r!   r"   H   r$   )r'   r'      r    $   r"   r$   )	icon-viewz	list-viewzcompact-viewr                     )smallestsmallersmallstandardlargelargerlargestzuser-desktopzfolder-documentszfolder-downloadzfolder-musiczfolder-pictureszfolder-publicsharezfolder-templateszfolder-videosz	user-homec                    d | _         d| _        d | _        t        j                  j                  d      | _        | j                  j                  d| j                         | j                  j                  d| j                         | j                  d        | j                  d        i | _
        d}t        j                  j                  |      rt        t        j                  |            D ]  }|j!                  d      s	 t#        t        j                  j%                  ||            5 }t'        j(                  |j+                               }|d   D ]%  }|d   }|d	   D ]  }|d
   }|| j                  |<    ' 	 d d d         y y # 1 sw Y   xY w# t,        $ r$}	t/        d| d       t/        |	       Y d }	~	d }	~	ww xY w)NFzorg.nemo.preferenceszchanged::ignore-view-metadatazchanged::default-folder-viewerz)/usr/share/folder-color-switcher/colors.dz.jsonstylesnameicon-themesthemezFailed to parse styles from .)parent_directoryignore_view_metadatadefault_viewr   Settingsnewnemo_settingsconnecton_ignore_view_metadata_changedon_default_view_changedr:   ospathexistssortedlistdirendswithopenjoinjsonloadsread	Exceptionprint)
selfrI   filenamef	json_text
style_json
style_nameicon_theme_jsonr;   es
             ?/usr/share/nemo-python/extensions/nemo-folder-color-switcher.py__init__zChangeFolderColorBase.__init__e   s    $ %*!  \\--.DE""#BDDhDhi""#CTEaEab,,T2$$T* :77>>$"2::d#34 !$$W-
!!"'',,tX">? C1(,

1668(<I.7.A C
-7-?
7A-7P !CO+:7+CD8BDKK$5!CCC!  C C % ! <XJaHIa!s1   )F-AF?FF	F	G F??Gc                 D    | j                   j                  |      | _        y N)rD   get_booleanr@   rU   settingskeys      r]   rF   z5ChangeFolderColorBase.on_ignore_view_metadata_changed   s    $($6$6$B$B3$G!    c                 D    | j                   j                  |      | _        y r`   )rD   
get_stringrA   rb   s      r]   rG   z-ChangeFolderColorBase.on_default_view_changed   s     ..99#>re   c                     t         j                  j                  d| z        j                  d      }t        j
                  |   S )Nzorg.nemo.%szdefault-zoom-level)r   rB   rC   rg   r   ZOOM_LEVELS)viewzoom_lvl_strings     r]   get_default_view_zoom_levelz1ChangeFolderColorBase.get_default_view_zoom_level   s8    ,,**=4+?@KKL`a$00AAre   c                 x    | j                  | j                        }t        j                  | j                     |   S r`   )rl   rA   r   ZOOM_LEVEL_ICON_SIZES)rU   zoom_lvl_indexs     r]   get_default_view_icon_sizez0ChangeFolderColorBase.get_default_view_icon_size   s4    99$:K:KL$::4;L;LMn]]re   c                 B    t         j                  j                  | d      S )Nfolder)r   KNOWN_DIRECTORIESget)	directorys    r]   get_folder_icon_namez*ChangeFolderColorBase.get_folder_icon_name   s    $66::9hOOre   c                     | j                   r%t        j                  d       | j                         S t        j                  d       | j	                         S )Nz#Nemo is set to ignore view metadataz"Nemo is set to apply view metadata)r@   loggerinforp   get_current_view_icon_sizerU   s    r]   get_desired_icon_sizez+ChangeFolderColorBase.get_desired_icon_size   sC    $$KK=>224489..00re   c                 ^   | j                   sy| j                   j                         j                  ddd       }|j                  d      }|r9t	        j
                  d|      }|j                  d      j                         dz   }n| j                  }|| j                  j                         v r]|j                  d|z        }|s| j                  |      }nt        |      }| j                  |   |   }t        j                  d	|       |S t        j                  d
       | j                         S )Nr#   zmetadata::*r   zmetadata::nemo-default-viewz#OAFIID:Nemo_File_Manager_(\w+)_Viewr,   z-viewzmetadata::nemo-%s-zoom-levelz%Icon size for the current view is: %izfalling back to defaults)r?   get_location
query_infoget_attribute_stringresearchgrouplowerrA   rn   keysrl   intrx   debugrp   )rU   ry   	meta_viewmatchrj   meta_zoom_lvl
zoom_level	icon_sizes           r]   rz   z0ChangeFolderColorBase.get_current_view_icon_size   s   $$$$113>>}aQUV--.KL	IIDiPE;;q>'')G3D$$D4--2244 556TW[6[\M  "==dC
 /
2248DILL@)L/0..00re   	icon_nameicon_theme_namesizescalereturnc                 z   t         j                  d||||       t        j                  j	                         }|j                  |       |T|j                  |d g||d      }|r<t        j                  |j                         d       }t         j                  d|       |S t         j                  d|t        ||       y )Nz9Searching: icon "%s" for theme "%s", size %i and scale %ir   zFound icon at URI: %sz7No icon "%s" found for color "%s", size %i and scale %i)rx   r   r   	IconThemerC   set_custom_themechoose_icon_for_scaler   filename_to_uriget_filenamecolor)rU   r   r   r   r   
icon_theme	icon_infouris           r]   %get_icon_uri_for_color_size_and_scalez;ChangeFolderColorBase.get_icon_uri_for_color_size_and_scale   s    PR[]lnrtyz]]&&(
##O4!"88)T9JDRWYZ[I**9+A+A+CTJ4c:
NPY[`bfhmnre   c                    |d   j                         | _        t        j                  d| j                  j	                                |6|d   }| j                         }| j                  d||| j                        }|sy |D ]  }|j                         r|j                         }|j                         }|R|d   }}	| j                  |      }
|
dk7  r| j                  |
|| j                        }	|	rB|j                  d|	dd        n-|j                  dt        j                  j                   ddd        t#        j$                  |d         y )Nr   zParent folder is: %sr=   rr   zmetadata::custom-icon)get_parent_infor?   rx   r   get_urir|   r   scale_factoris_goner~   get_pathrv   set_attribute_stringset_attributer   FileAttributeTypeINVALIDrH   utime)rU   foldersr   
theme_namer   default_folder_icon_urirr   ru   rI   icon_urir   s              r]   set_folder_colorsz'ChangeFolderColorBase.set_folder_colors   s]    '
 : : <+T-B-B-J-J-LM!#G,J224I&*&P&PQY[egprv  sD  sD  'E#* 	!F~~ ++-I%%'D%'0
2 55d;	(#II)U_ajlpl}l}~H223JHVWY]^ ''(?AVAVA^A^`acdfjk HHT4 /	!re   N)zignore-view-metadata)zdefault-folder-viewer)r+   )__name__
__module____qualname__rn   ri   r   get_user_special_dirUserDirectoryDIRECTORY_DESKTOPDIRECTORY_DOCUMENTSDIRECTORY_DOWNLOADDIRECTORY_MUSICDIRECTORY_PICTURESDIRECTORY_PUBLIC_SHAREDIRECTORY_TEMPLATESDIRECTORY_VIDEOSget_home_dirrs   r^   rF   rG   staticmethodrl   rp   rv   r|   rz   strr   r   r    re   r]   r   r   @   s    8 87 K 	"!!$"4"4"F"FG!!!$"4"4"H"HIK]!!!$"4"4"G"GHJ[!!!$"4"4"D"DE~!!!$"4"4"G"GHJ[!!!$"4"4"K"KLNb!!!$"4"4"H"HIK]!!!$"4"4"E"EF[
!>H? B B^ P P11@s UX `c lo tw #!re   r   s  
.folder-color-switcher-button,
.folder-color-switcher-restore {
    min-height: 16px;
    min-width: 16px;
    padding: 0;
}
.folder-color-switcher-button {
    border-style: solid;
    border-width: 1px;
    border-radius: 1px;
    border-color: transparent;
}

.folder-color-switcher-button:hover {
    border-color: #9c9c9c;
}

.folder-color-switcher-restore {
    background-color: transparent;
}

.folder-color-switcher-restore:hover {
    background-color: rgba(255,255,255,0);
}
iX  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )ChangeFolderColorc                 L    t         |           t        j                  d       y )Nz/Initializing folder-color-switcher extension...)superr^   rx   ry   )rU   	__class__s    r]   r^   zChangeFolderColor.__init__  s    EFre   c                 R    |j                         | _        | j                  ||       y r`   )get_scale_factorr   r   )rU   menur   r   s       r]   menu_activate_cbz"ChangeFolderColor.menu_activate_cb  s#     113w
3re   c                      y r`   r   )rU   windowcurrent_folders      r]   get_background_itemsz&ChangeFolderColor.get_background_items   s    re   c                     dt         z  gS )Nzfolder-color-switcher:::%s)PLUGIN_DESCRIPTIONr{   s    r]   get_name_and_descz#ChangeFolderColor.get_name_and_desc#  s    -0BBDDre   c                 J   |sy g }g }|D ]  }|j                         st        j                  d       )t        j                  d|j	                                |j                         dk7  r y |j                         }t        j                  d|j                                |j                  |       |j                  |        |sy t        j                  j                         j                  d      }|| j                  v r| j                  |   d   }t        j                  t        j                   d       t#        j$                  d       t#        j&                  d       t        j                  d	       t)        j*                  d
      }|j-                  | j/                  ||             |j1                  | j/                  ||             t(        j*                  j3                  d      |t(        j*                  j3                  d      fS t        j                  d       y )Nz,A selected item is not a directory, skippingzURI "%s" is in selectionfilezValid path selected: "%s"zgtk-icon-theme-namer<    r
   z1At least one color supported: creating menu entryzChangeFolderColorMenu::Top)r;   zChangeFolderColorMenu::TopSepzChangeFolderColorMenu::BotSepz#Could not find any supported colors)is_directoryrx   ry   r   r   get_uri_schemer~   r   appendr   rB   get_defaultget_propertyr:   locale	setlocaleLC_ALLgettextbindtextdomain
textdomainr   MenuItemset_widget_agenerate_widgetset_widget_bnew_separator)	rU   r   items_selecteddirectoriesdirectories_selecteditemru   r   icon_themess	            r]   get_file_itemsz ChangeFolderColor.get_file_items'  s   !" 	.D$$&JKLL3T\\^D""$.))+ILL4i6H6H6JKy) ''-	.  $,,224AABWXdkk)++o6}EKV]]B/""#:;67LLLM==&BCDd22;@TUVd22;@TUV==../NO==../NOP P LL>?re   c                    t         j                  j                  t         j                  j                  d      }|j                         | _        | j                  d       }|j                  d| j                  d |       t        |      dkD  r|j                  t        d             n|j                  t        d             |j                  |ddd       |D ]  }t        |d         }| j                  |      }|j                  d| j                  ||       t        |      dkD  r|j                  t        d      |z         n|j                  t        d      |z         |j                  |ddd        |j                          |S )	Nr,   clickedz*Restores the color of the selected foldersz)Restores the color of the selected folderFr;   z/Changes the color of the selected folders to %sz.Changes the color of the selected folder to %s)r   BoxrC   Orientation
HORIZONTALr   r   make_buttonrE   r   lenset_tooltip_text_
pack_startset_tooltip_markupshow_all)rU   r   itemswidgetbuttonr   
color_names          r]   r   z!ChangeFolderColor.generate_widgetS  sL   S__77;"335 !!$'y$"7"7uEu:>##Q'S%TU##Q'R%ST&%2% 	7J:f-.J%%j1FNN9d&;&;ZO5zA~))1-^+_bl+lm))1-]+^ak+klfeUA6	7 	re   c                    t        j                         }|j                         }|:|j                  d       t	        j
                  d      }|j                  |       |S |j                  d       d| _        t        d      5 }|j                         | _        d d d        | j                  j                  d|d         }d|v r|j                  d	|d         }n|j                  d	|d         }t        j                  |      }t        j                  j                  t         j"                  j%                  |            }t&        j(                  j+                  |d
| j,                  z  d
| j,                  z  dd       }t/        j0                  || j,                        }	t        j
                  j3                  |	      }|j                  |       |S # 1 sw Y   8xY w)Nzfolder-color-switcher-buttonzedit-delete-symbolic)r   r   z*/usr/share/folder-color-switcher/color.svgz#71718er   color2z#4bb4aa   T)r   SimpleButtonget_style_context	add_classr   Image	set_image	color_svgrN   rR   replacer   encoder   MemoryInputStreamnew_from_bytesr   BytesrC   r	   Pixbufnew_from_stream_at_scaler   r    cairo_surface_create_from_pixbufnew_from_surface)
rU   r   r   cimagerW   svgstreampixbufsurfaces
             r]   r   zChangeFolderColor.make_buttono  s   ""$$$&KK67II(>?EU#"  KK67DNBC *q!"*..((Jw4GHC:%kk)Z-ABkk)Z-@A**S/C**99$**..:MNF%%>>vrDL]L]G]_adhdudu_uw{  ~B  CF::64CTCTUGII..w7EU#* *s   GG)r   r   r   r^   r   r   r   r   r   r   __classcell__)r   s   @r]   r   r     s)    G
4
E*X8re   r   )0r   girP   r   rH   r   require_versiongi.repositoryr   r   r   r   r   r   r	   APP
LOCALE_DIRr   r   r   r   signalSIGINTSIG_DFLlogginggetenv	log_levelWARNINGr   basicConfig	getLoggerr   rx   color_namesobjectr   
css_colorsCssProviderproviderload_from_dataScreenr   screenStyleContextadd_provider_for_screenMenuProviderNameAndDescProviderr   r   re   r]   <module>r*     s	    	   	 	   5%     65 ! G G G  
   c: &   sJ '   3 OOmn   fmmV^^ , BII148	III   ) $			8	$ fIgJgJfIgJfIgJfIfIhKfIhKeHfIfIgJhK#(r!F r!j
6 3??   
 #				!    ( (&(C @q-w@Q@QSWSkSk qre   