
    b_I                         d Z ddlZ	 ddlmc mZ n# e$ r ddlmc mZ Y nw xY wddlm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZ ddlmZ  G d de          ZdS )	z CLass to edit XDG Menus     N)Menu	MenuEntryLayout	SeparatorXMLMenuBuilder)xdg_config_dirsxdg_data_dirs)ParsingError)setRootModec                      e 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.dZd.dZd/dZd0d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d1dZd Zd Zd2d!Zd" Z d# Z!d$ Z"d.d%Z#d.d&Z$d' Z%d( Z&d) Z'd* Z(dS )3
MenuEditorNFc                     d | _         d | _        d | _        t                      | _        |                     |||           g | _        d S N)menufilenametreer   parserparse	filenamesselfr   r   roots       .lib/python3.11/site-packages/xdg/MenuEditor.py__init__zMenuEditor.__init__   sG    		$&&

44(((     c                    |rt          d           t          |t                    r|| _        n@|r | j                            |          | _        n| j                                        | _        |r| j        j        | _        nh|r|| _        n^t          j	        
                    t          d         dt          j	                            | j        j                  d                   | _        	 t          j        | j                  | _        nh# t          $ r= t          j        d| j        j        z            }t          j        |          | _        Y n"t$          $ r t%          d| j                  w xY w|                     | j                   d S )NTr   menus   z
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://standards.freedesktop.org/menu-spec/menu-1.0.dtd">
    <Menu>
        <Name>Applications</Name>
        <MergeFile type="parent">%s</MergeFile>
    </Menu>
zNot a valid .menu file)r   
isinstancer   r   r   r   Filenamer   ospathjoinr   splitetreer   IOError
fromstringElementTreer
   $_MenuEditor__remove_whitespace_nodesr   s       r   r   zMenuEditor.parse$   s    	dD!! 	,DII 	,))$//DII))++DI 	l I.DMM 	l$DMMGLL);WbgmmTXT]TfFgFghiFjkkDM	HDM22DII 	0 	0 	0# % i%  D )$//DIII 	H 	H 	H7GGG	H 	&&ty11111s   ,D AE0E0c                 b    |                      | j                   |                                  d S r   )_MenuEditor__saveEntriesr   _MenuEditor__saveMenur   s    r   savezMenuEditor.saveG   s.    49%%%r   c
           	          t          |                     |d                    }
|                     |
||||||          }
|                     ||
||	           | j                                         |
S )N.desktop)r   _MenuEditor__getFileNameeditMenuEntry_MenuEditor__addEntryr   sort)r   parentnamecommandgenericnamecommenticonterminalafterbefore	menuentrys              r   createMenuEntryzMenuEditor.createMenuEntryK   sp    d00zBBCC	&&y$WgW[]eff		5&999	r   c                    t                      }||_        |j        dz   |_        |j        |_        |j        |_        |                     |||||          }|                     ||||           | j                                         |S )Nr   )	r   ParentDepthDefaultLayoutr   editMenur3   r   r4   )	r   r5   r6   r8   r9   r:   r<   r=   r   s	            r   
createMenuzMenuEditor.createMenuU   s}    vv\A%
*#1}}T4gtDDeV444	r   c                     t          |          }|                     ||||           | j                                         |S r   )r   r3   r   r4   )r   r5   r<   r=   	separators        r   createSeparatorzMenuEditor.createSeparatore   s?    f%%		5&999	r   c                     |                      ||||           |                     ||||           | j                                         |S r   _MenuEditor__deleteEntryr3   r   r4   r   r>   	oldparent	newparentr<   r=   s         r   moveMenuEntryzMenuEditor.moveMenuEntryn   sL    9i???	9eV<<<	r   c           	      4   |                      ||||           |                     ||||           |                     | j        j                  }|                    d          |                    d          k    r|                     |t          j        	                    |                    d          |j                  t          j        	                    |                    d          |j                             | j        
                                 |S )NT)rK   r3   _MenuEditor__getXmlMenur   NamegetPath_MenuEditor__addXmlMover!   r"   r#   r4   )r   r   rM   rN   r<   r=   	root_menus          r   moveMenuzMenuEditor.moveMenuv   s   9dE6:::	4777%%din55	T""i&7&7&=&===ii6G6G6M6Mty)Y)Y[][b[g[ghqhyhyz~hh  BF  BK  \L  \L  M  M  M	r   c                     |                      ||||           |                     ||||           | j                                         |S r   rJ   )r   rG   r5   r<   r=   s        r   moveSeparatorzMenuEditor.moveSeparator   sL    69eV<<<	5&999	r   c                 h    |                      ||||           | j                                         |S r   )r3   r   r4   rL   s         r   copyMenuEntryzMenuEditor.copyMenuEntry   s2    	9eV<<<	r   c
                    |j         }
|rC|
                    d          s|
                    d|           |
                    d|d           |rC|
                    d          s|
                    d|           |
                    d|d           |rC|
                    d          s|
                    d|           |
                    d|d           |r|
                    d|           |r|
                    d|           |r|
                    dd	           n|s|
                    dd
           |du r|
                    dd	           n|du r|
                    dd
           |	du r|
                    dd	           n|	du r|
                    dd
           |                                 t	          |j                  dk    r| j                                         |S )NrR   TlocaleCommentGenericNameExecIconTerminaltruefalse	NoDisplayFHiddenr   )DesktopEntryhasKeysetupdateAttributeslenParentsr   r4   )r   r>   r6   r8   r9   r7   r:   r;   	nodisplayhidden	deskentrys              r   r2   zMenuEditor.editMenuEntry   s   *	 	5##F++ ,fd+++MM&$tM444 	;##I.. 2i111MM)WTM::: 	C##M22 :m[999MM-TMBBB 	+MM&'*** 	(MM&$''' 	/MM*f---- 	/MM*g...MM+v....%MM+w///T>>MM(F++++u__MM(G,,,""$$$y !!A%%INNr   c                    t          |j        t                    r{|j        j        dk    rk|                     |                    dd                    }|                     |d|j        dz              |j                            |j        dz              nt          |j        t                    s|s|j        }| 	                    |d          
                    dd          }	|j        s|	
                    dd          |_        |                     |                    dd                    }|                     |d|	           t          |	          |_        |j        j        }
|rC|
                    d          s|
                    d|           |
                    d|d           |rC|
                    d          s|
                    d|           |
                    d|d           |rC|
                    d	          s|
                    d	|           |
                    d	|d           |r|
                    d
|           |du r|
                    dd           n|du r|
                    dd           |du r|
                    dd           n|du r|
                    dd           |j                                         t          |j        t                     r| j                                         |S )N
.directoryT	Directory/ rR   r\   r_   r^   ra   re   rc   Frd   rf   )r   rr   r   r    rQ   rS   _MenuEditor__addXmlTextElementrR   setAttributesr1   replacerg   rh   ri   rj   rA   r   r   r4   )r   r   r6   r8   r9   r:   rm   rn   xml_menur   ro   s              r   rD   zMenuEditor.editMenu   s   dni00 	1T^5LP\5\5\((dD)A)ABBH$$X{DI<TUUUN((\)ABBBBDNI66 	1 !y))$==EEc2NNH9 ?$,,\2>>	((dD)A)ABBH$$X{HEEE&x00DNN/	 	5##F++ ,fd+++MM&$tM444 	C##M22 :m[999MM-TMBBB 	;##I.. 2i111MM)WTM::: 	(MM&$'''MM+v....%MM+w///T>>MM(F++++u__MM(G,,,'')))dk4(( 	INNr   c                 4    |                      |d           d S NT)rm   r2   r   r>   s     r   hideMenuEntryzMenuEditor.hideMenuEntry   s!    955555r   c                 6    |                      |dd           d S )NFrm   rn   r{   r|   s     r   unhideMenuEntryzMenuEditor.unhideMenuEntry   s#    9eDDDDDr   c                 4    |                      |d           d S rz   )rD   r   r   s     r   hideMenuzMenuEditor.hideMenu   s    dd+++++r   c                    |                      |dd           |                     |                    dd          d          }|                    d          }|                    d          }||z   D ]}|                    |           d S )NFr   TDeleted
NotDeleted)rD   rQ   rS   findallremove)r   r   rx   deletednot_deletednodes         r   
unhideMenuzMenuEditor.unhideMenu   s    deE:::$$T\\$%=%=uEE""9--&&|44k) 	" 	"DOOD!!!!	" 	"r   c                     |                      |          dk    rX|                     |j        j                   |j        D ]}|                     ||           | j                                         |S )Ndelete)	getAction_MenuEditor__deleteFilerg   r   rl   rK   r   r4   )r   r>   r5   s      r   deleteMenuEntryzMenuEditor.deleteMenuEntry   sv    >>)$$00i4=>>>#+ 6 6""695555INNr   c                    |                      |          dk    r|                     |j        j                   g |j        _        |j        D ]s}|j                            |          }|j        |j        |<   |j                            |          }|j        |j        |<   |j        j        	                    |           t| j
                                         |S Nrevert)r   r   rg   r   Originalrl   EntriesindexMenuEntriesappendr   r4   )r   r>   r5   r   s       r   revertMenuEntryzMenuEditor.revertMenuEntry  s    >>)$$00i4=>>>)+I&#+ : :,,Y77(1(:u%*00;;,5,>"5)"*11&9999INNr   c                    |                      |          dk    r|                     |j        j        j                   |                     |j        |           |                     |                    dd                    }| 	                    |          }|
                    |           | j                                         |S )Nr   T)r   r   rr   rg   r   rK   rA   rQ   rS   _MenuEditor__get_parent_noder   r   r4   )r   r   rx   r5   s       r   
deleteMenuzMenuEditor.deleteMenu  s    >>$8++dn9BCCCt{D111((dD)A)ABBH++H55FMM(###INNr   c                     |                      |          dk    rN|                     |j        j        j                   |j        j        |_        | j                                         |S r   )r   r   rr   rg   r   r   r   r4   r   s     r   
revertMenuzMenuEditor.revertMenu  sX    >>$8++dn9BCCC!^4DNINNr   c                 r    |                      |j        |d           | j                                         |S )NT)r<   )rK   rA   r   r4   )r   rG   s     r   deleteSeparatorzMenuEditor.deleteSeparator%  s8    9+YdCCC	r   c                    t          |t                    rt          |j        t                    sdS |j                                        dk    rdS |j                                        dk    r/t          |j                  t          |j                  z   dk    rdS nKt          |t                    r6|                                dk    rdS |                                dk    rdS dS dS )NnoneBothr   Userr   r   )r   r   rr   r   getTyperk   Submenusr   )r   entrys     r   r   zMenuEditor.getAction-  s    eT"" 	eoy99  v((**f44x((**f44EN##c%*;&<&<<: :  xy)) 	}}&((xF**xvvr   c                 X   |s| j         }t          |j        t                    r|j                                         |                    d          D ]V}t          |t                    r|                                 ,t          |t                    r|                     |           Wd S )NT)rn   )r   r   rr   r   r.   
getEntriesr   r+   )r   r   r   s      r   __saveEntrieszMenuEditor.__saveEntriesB  s     	9Ddni00 	"N!!!__D_11 	* 	*E%++ *

E4(( *""5)))		* 	*r   c                 6   t           j                            t           j                            | j                            s6t          j        t           j                            | j                             | j                            | j        d           d S )Nzutf-8)encoding)r!   r"   isdirdirnamer   makedirsr   writer-   s    r   
__saveMenuzMenuEditor.__saveMenuM  sh    w}}RW__T];;<< 	8K66777	88888r   c                 \   d}	 |dk    r||z   }n|dz   t          |          z   |z   }|dk    rd}n|dk    rd}|| j        vrdt          j                            t          j                            t          d         ||                    s| j                            |           n|dz  }|S )Nr   r   -r0   applicationsrq   zdesktop-directories)strr   r!   r"   isfiler#   r	   r   )r   r6   	extensionpostfixr   dirs         r   __getFileNamezMenuEditor.__getFileNameR  s    	!||)+#:G4y@J&&$l**+t~--bgnn]1-sH==7 7- %%h///1	" r   Tc                 |   |s| j         }d|v r|                    dd          \  }}n|}d}d }|                    d          D ]B}|                    d          }|j        |k    r|r|                     |||          }n|}|r nC|s4|r2|                     ||          }|r|                     |||          }n|}|S )Nrs   r   rt   r   rR   )r   r$   r   findtextrQ   _MenuEditor__addXmlMenuElement)r   r"   createelementr6   foundr   	name_nodes           r   __getXmlMenuzMenuEditor.__getXmlMenug  s     	 iG$;;::c1--LT44DDOOF++ 	 	D		&))I~%% ! --dFDAAEE E  	 	++GT::D ))$==r   c                 h    t          j        d|          }t          j        d|          }||_        |S )Nr   rR   r%   
SubElementr   )r   r   r6   	menu_noder   s        r   __addXmlMenuElementzMenuEditor.__addXmlMenuElement  s3    $VW55	$VY77		r   c                 >    t          j        ||          }||_        |S r   r   )r   r   r6   r   r   s        r   __addXmlTextElementzMenuEditor.__addXmlTextElement  s     g..	r   Includec                 4   |                     d          }|                     d          }||z   }|D ]9}|d         j        dk    r&|d         j        |k    r|                    |           :t	          j        ||          }|                     |d|           |S )Nr   Excluder   r    )r   tagr   r   r%   r   ru   )	r   r   r   type_includesexcludesrulesruler   s	            r   __addXmlFilenamezMenuEditor.__addXmlFilename  s    ??9--??9--8# 	% 	%DAw{j((T!W\X-E-Et$$$ w//  z8<<<r   c                     t          j        d|          }|                     |d|           |                     |d|           |S )NMoveOldNew)r%   r   ru   )r   r   oldnewr   s        r   __addXmlMovezMenuEditor.__addXmlMove  sI    00  uc222  uc222r   c                    |                     d          D ]}|                    |           t          j        d|          }|j        D ]}|d         dk    rt          j        d|          }$|d         dk    r|                     |d|d                   }N|d         dk    r|                     |d|d                   }x|d         dk    r%t          j        d|          }|d         |j        d<   |S )	Nr   r   r   r    r   MenunameMergetype)r   r   r%   r   orderru   attrib)r   r   layoutr   r   childs         r   __addXmlLayoutzMenuEditor.__addXmlLayout  s	   OOH-- 	! 	!DNN4     '22\ 		0 		0EQx;&&(d;;qZ''00z58LLqZ''00z58LLqW$$($77',QxV$r   c                 ~   t                      }g |_        |j         j        |_        |j         j        |_        |j         j        |_        |j         j        |_        |j         j        |_        |j                            ddg           |j        D ]}t          |t                    r|                    |j                   2t          |t                    r|                    |j                   bt          |t                     r|                                 |j                            ddg           ||_         |S )Nr   r   files)r   r   
show_emptyinlineinline_headerinline_aliasinline_limitr   r   r   r   parseMenunamerR   r   parseFilenameDesktopFileIDr   parseSeparator)r   r5   r   r   s       r   __addLayoutzMenuEditor.__addLayout  s!   "M4,%}:$m8$m8Wg.///^ 	( 	(E%&& ($$UZ0000E9-- ($$U%89999E9-- (%%'''Wg.///r   c                    |s|rX|r|j                             |          dz   }n|r|j                             |          }|j                             ||           n|j                             |           |                     |                    dd                    }t          |t                    rQ|j                            |           |j	                            |           | 
                    ||j        d           n*t          |t                    r|                    |           |s|r2|                     |           |                     ||j                   d S d S )Nr   Tr   )r   r   insertr   rQ   rS   r   r   r   rl   _MenuEditor__addXmlFilenamer   r   
addSubmenu_MenuEditor__addLayout_MenuEditor__addXmlLayoutr   )r   r5   r   r<   r=   r   
xml_parents          r   
__addEntryzMenuEditor.__addEntry  sr    	)F 	) 5,,U33a7 5,,V44N!!%////N!!%(((&&v~~dD'A'ABB
eY'' 	%%%e,,,M  (((!!*e.A9MMMMt$$ 	%e$$$ 	;F 	;V$$$
FM:::::	; 	;r   c                 "   |j                             |           |                     |                    dd                    }t	          |t
                    rQ|j                            |           |j                            |           |                     ||j	        d           n/t	          |t                    r|j                            |           |s|r2|                     |           |                     ||j                   d S d S )NTr   )r   r   rQ   rS   r   r   rl   r   r   r   r   r   r   r   r   )r   r5   r   r<   r=   r   s         r   __deleteEntryzMenuEditor.__deleteEntry  s	   e$$$&&v~~dD'A'ABB
eY'' 	*M  (((%%e,,,!!*e.A9MMMMt$$ 	*O""5))) 	;F 	;V$$$
FM:::::	; 	;r   c                     	 t          j        |           n# t          $ r Y nw xY w	 | j                            |           d S # t          $ r Y d S w xY wr   )r!   r   OSErrorr   
ValueError)r   r   s     r   __deleteFilezMenuEditor.__deleteFile  s}    	Ih 	 	 	D		N!!(+++++ 	 	 	DD	s    
$$A 
AAc                     |D ]j}|j                                         }|sd|_         |j                                        }|sd|_        t          |          r|                     |           kd S )Nrt   )r   striptailrk   $_MenuEditor__remove_whilespace_nodes)r   r   r   r   r  s        r   __remove_whitespace_nodesz$MenuEditor.__remove_whitespace_nodes	  s     	6 	6E:##%%D  
:##%%D  
5zz 6..u555	6 	6r   c                 J    |                                  D ]\  }}||u r|c S d S r   )_MenuEditor__iter_parent)r   r   r5   r   s       r   __get_parent_nodezMenuEditor.__get_parent_node  sB    !//11 	 	MFE}} 	 	r   c              #   X   K   | j                                         D ]}|D ]}||fV  	d S r   )r   getiterator)r   r5   r   s      r   __iter_parentzMenuEditor.__iter_parent  sT      i++-- 	$ 	$F $ $em####$	$ 	$r   )NNF)NNNNNNN)NNNNN)NN)NNNNNNNN)NNNNNN)TN)r   ))__name__
__module____qualname__r   r   r.   r?   rE   rH   rO   rV   rX   rZ   r2   rD   r}   r   r   r   r   r   r   r   r   r   r+   r,   r1   rQ   r   ru   r   rT   r   r   r3   rK   r   r)   r   r   r   r   r   r      s          !2 !2 !2 !2F               
 
 
 
      ( ( ( (T1 1 1 1f6 6 6E E E, , ," " "             *	* 	* 	*9 9 9
  *   @    
   ,    &  .; ; ; ;.; ; ; ;   	6 	6 	6  $ $ $ $ $r   r   )__doc__r!   xml.etree.cElementTreer%   cElementTreeImportErrorxml.etree.ElementTreer(   xdg.Menur   r   r   r   r   xdg.BaseDirectoryr   r	   xdg.Exceptionsr
   
xdg.Configr   objectr   r  r   r   <module>r     s     				*********** * * *)))))))))))* H G G G G G G G G G G G G G < < < < < < < < ' ' ' ' ' ' " " " " " "E$ E$ E$ E$ E$ E$ E$ E$ E$ E$s   	 ##