Mini Shell

Direktori : /usr/lib/python3.6/site-packages/xdg/__pycache__/
Upload File :
Current File : //usr/lib/python3.6/site-packages/xdg/__pycache__/MenuEditor.cpython-36.opt-1.pyc

3

0��G�G�@sVdZddlTddlTddlTddlTddlTddlZddlZddl	Z	Gdd�d�Z
dS)z CLass to edit XDG Menus �)�*Nc@sReZdZdOdd�ZdPdd�Zdd�ZdQd	d
�ZdRdd�ZdSd
d�ZdTdd�Z	dUdd�Z
dVdd�ZdWdd�ZdXdd�Z
dYdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�ZdZd6d7�Zd8d9�Zd:d;�Zd[d=d>�Zd?d@�Z dAdB�Z!dCdD�Z"dEdF�Z#d\dGdH�Z$d]dIdJ�Z%dKdL�Z&dMdN�Z'dS)^�
MenuEditorNFcCs*d|_d|_d|_|j|||�g|_dS)N)�menu�filename�doc�parse�	filenames)�selfrr�root�r� /usr/lib/python3.6/MenuEditor.py�__init__s
zMenuEditor.__init__cCs�|dkrtd�t|t�r"||_n|r2t|�|_nt�|_|dkrN|jj|_n2|rZ||_n&tjj	t
ddtjj|jj�d�|_ytj
jj|j�|_WnTtk
r�tj
jjd|jjd�|_Yn&tjjjk
r�td|j��YnX|j|j�dS)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">z</MergeFile></Menu>zNot a valid .menu file)ZsetRootMode�
isinstance�Menurr�Filenamer�os�path�joinZxdg_config_dirs�split�xml�dom�minidomr�IOErrorZparseStringZparsersZexpatZ
ExpatErrorZParsingError�$_MenuEditor__remove_whilespace_nodes)r	rrr
rrrr!s&
& zMenuEditor.parsecCs|j|j�|j�dS)N)�_MenuEditor__saveEntriesr�_MenuEditor__saveMenu)r	rrr�save<szMenuEditor.savec
CsDt|j|d��}
|j|
||||||�}
|j||
||	�t|j�|
S)Nz.desktop)�	MenuEntry�_MenuEditor__getFileName�
editMenuEntry�_MenuEditor__addEntry�sortr)r	�parent�name�command�genericname�comment�icon�terminal�after�before�	menuentryrrr�createMenuEntry@s

zMenuEditor.createMenuEntryc	CsXt�}||_|jd|_|j|_|j|_|j|||||�}|j||||�t|j�|S)Nr)	r�ParentZDepthZ
DefaultLayout�Layout�editMenur"r#r)	r	r$r%r'r(r)r+r,rrrr�
createMenuJs
zMenuEditor.createMenucCs&t|�}|j||||�t|j�|S)N)�	Separatorr"r#r)r	r$r+r,�	separatorrrr�createSeparatorZs
zMenuEditor.createSeparatorcCs.|j||||�|j||||�t|j�|S)N)�_MenuEditor__deleteEntryr"r#r)r	r-�	oldparent�	newparentr+r,rrr�
moveMenuEntrycs
zMenuEditor.moveMenuEntrycCs�|j||||�|j||||�|j|jj�}|jd�|jd�krt|j|tjj	|jd�|j�tjj	|jd�|j��t
|j�|S)NT)r6r"�_MenuEditor__getXmlMenur�Name�getPath�_MenuEditor__addXmlMoverrrr#)r	rr7r8r+r,Z	root_menurrr�moveMenuks2
zMenuEditor.moveMenucCs.|j||||�|j||||�t|j�|S)N)r6r"r#r)r	r4r$r+r,rrr�
moveSeparatorws
zMenuEditor.moveSeparatorcCs|j||||�t|j�|S)N)r"r#r)r	r-r7r8r+r,rrr�
copyMenuEntrys
zMenuEditor.copyMenuEntryc
CsL|j}
|r0|
jd�s |
jd|�|
jd|dd�|rZ|
jd�sJ|
jd|�|
jd|dd�|r�|
jd�st|
jd|�|
jd|dd�|r�|
jd|�|r�|
jd|�|dkr�|
jd	d
�n|dkr�|
jd	d�|dkr�|
jd
d
�n|dkr�|
jd
d�|	dk�r|
jdd
�n|	dk�r&|
jdd�|j�t|j�dk�rHt|j�|S)Nr;T)�locale�CommentZGnericNe�GenericNameZExec�IconZTerminal�trueF�false�	NoDisplay�Hiddenr)�DesktopEntry�hasKey�set�updateAttributes�len�Parentsr#r)r	r-r%r'r(r&r)r*�	nodisplay�hidden�	deskentryrrrr!�sB





zMenuEditor.editMenuEntrycCs�t|jt�rR|jjdkrR|j|jdd��}|j|d|jd�|jj|jd�nht|jt�s�|sh|j}|j	|d�j
dd�}	|js�|	j
dd�|_|j|jdd��}|j|d|	�t|	�|_|jj}
|r�|
jd�s�|
j
d|�|
j
d|dd�|�r|
jd��s
|
j
d|�|
j
d|dd�|�rH|
jd	��s8|
j
d	|�|
j
d	|dd�|�rZ|
j
d
|�|dk�rr|
j
dd�n|d
k�r�|
j
dd�|dk�r�|
j
dd�n|d
k�r�|
j
dd�|jj�t|jt��r�t|j�|S)Nz
.directoryT�	Directory�/�r;)rArCrBrDrGrEFrFrH)rrRrrr:r<�_MenuEditor__addXmlTextElementr;Z
setAttributesr �replacerIrJrKrLr/rr#r)r	rr%r'r(r)rOrP�xml_menurrQrrrr1�sP







zMenuEditor.editMenucCs|j|dd�dS)NT)rO)r!)r	r-rrr�
hideMenuEntry�szMenuEditor.hideMenuEntrycCs|j|ddd�dS)NF)rOrP)r!)r	r-rrr�unhideMenuEntry�szMenuEditor.unhideMenuEntrycCs|j|dd�dS)NT)rO)r1)r	rrrr�hideMenu�szMenuEditor.hideMenucCsN|j|ddd�|j|jdd�d�}x$|jddg|�D]}|jj|�q6WdS)NF)rOrPTZDeletedZ
NotDeleted)r1r:r<�_MenuEditor__getXmlNodesByName�
parentNode�removeChild)r	rrW�noderrr�
unhideMenu�szMenuEditor.unhideMenucCsF|j|�dkrB|j|jj�x|jD]}|j||�q$Wt|j�|S)N�delete)�	getAction�_MenuEditor__deleteFilerIrrNr6r#r)r	r-r$rrr�deleteMenuEntry�s
zMenuEditor.deleteMenuEntrycCs�|j|�dkr||j|jj�g|j_xL|jD]B}|jj|�}|j|j|<|jj|�}|j|j|<|jjj	|�q,Wt
|j�|S)N�revert)rarbrIr�OriginalrN�Entries�index�MenuEntries�appendr#r)r	r-r$rgrrr�revertMenuEntry�s
zMenuEditor.revertMenuEntrycCsX|j|�dkrT|j|jjj�|j|j|�|j|jdd��}|j	j
|�t|j�|S)Nr`T)
rarbrRrIrr6r/r:r<r\r]r#r)r	rrWrrr�
deleteMenus
zMenuEditor.deleteMenucCs6|j|�dkr2|j|jjj�|jj|_t|j�|S)Nrd)rarbrRrIrrer#r)r	rrrr�
revertMenus


zMenuEditor.revertMenucCs |j|j|dd�t|j�|S)NT)r+)r6r/r#r)r	r4rrr�deleteSeparators
zMenuEditor.deleteSeparatorcCs�t|t�rXt|jt�sdS|jj�dkr,dS|jj�dkr�t|j�t|j�dkr�dSn.t|t�r�|j�dkrrdS|j�dkr�dSdSdS)NZnoneZBothrdZUserrr`)rrrRrZgetTyperM�Submenusrh)r	�entryrrrras

zMenuEditor.getActioncCsb|s
|j}t|jt�r |jj�x<|jdd�D],}t|t�rF|j�q.t|t�r.|j|�q.WdS)NT)rP)rrrRrrZ
getEntriesrr)r	rrorrrZ
__saveEntries3s



zMenuEditor.__saveEntriescCsdtjjtjj|j��s*tjtjj|j��t|jd�}|jtj	dd|j
j�jdd���|j
�dS)N�wz
[\s]*([^
<]*)
[\s]*</z\1</z<?xml version="1.0" ?>
rT)rr�isdir�dirnamer�makedirs�open�write�re�subrZtoprettyxmlrV�close)r	�fdrrrZ
__saveMenu>s
"zMenuEditor.__saveMenucCs�d}x�|dkr||}n|dt|�|}|dkr:d}n|dkrFd}||jkr~tjjtjjtd||��r~|jj|�Pq|d7}qW|S)Nr�-z.desktopZapplicationsz
.directoryzdesktop-directoriesr)�strrrr�isfilerZ
xdg_data_dirsri)r	r%�	extensionZpostfixr�dirrrrZ
__getFileNameEs

zMenuEditor.__getFileNameTcCs�|s
|j}d|kr$|jdd�\}}n|}d}d}xZ|jd|�D]J}x>|jd|�D].}|jdj|krP|rx|j|||�}n|}PqPW|r>Pq>W|r�|dkr�|j||�}|r�|j|||�}n|}|S)NrSrrTrr;rT)rrr[�
childNodes�	nodeValuer:�_MenuEditor__addXmlMenuElement)r	rZcreate�elementr%�foundr^�childrrrZ__getXmlMenuYs,zMenuEditor.__getXmlMenucCs$|jjd�}|j|d|�|j|�S)Nrr;)r�
createElementrU�appendChild)r	r�r%r^rrrZ__addXmlMenuElementwszMenuEditor.__addXmlMenuElementcCs,|jj|�}|jj|�}|j|�|j|�S)N)rr�ZcreateTextNoder�)r	r�r%�textr^rrrZ__addXmlTextElement|s
zMenuEditor.__addXmlTextElement�IncludecCstxH|jddg|�D]4}|jdjdkr|jdjdj|kr|j|�qW|jj|�}|j|j|d|��|j|�S)Nr��Excluderr)	r[r�nodeNamer�r]rr�r�rU)r	r�r�typer^rrrZ__addXmlFilename�s&zMenuEditor.__addXmlFilenamecCs>|jjd�}|j|j|d|��|j|j|d|��|j|�S)NZMoveZOldZNew)rr�r�rU)r	r��old�newr^rrrZ__addXmlMove�szMenuEditor.__addXmlMovecCs�x|jd|�D]}|j|�qW|jjd�}x�|jD]�}|ddkr\|jjd�}|j|�q4|ddkr||j|d|d�}q4|ddkr�|j|d|d�}q4|ddkr4|jjd�}|jd|d�|j|�q4W|j|�S)	Nr0rr3rrZMenuname�Merger�)r[r]rr��orderr�rUZsetAttribute)r	r��layoutr^r�r�rrrZ__addXmlLayout�s zMenuEditor.__addXmlLayoutccs4x.|jD]$}|jtjjjkr|j|kr|VqWdS)N)r�nodeTyperr�NodeZELEMENT_NODEr�)r	r%r�r�rrrZ__getXmlNodesByName�szMenuEditor.__getXmlNodesByNamecCs�t�}g|_|jj|_|jj|_|jj|_|jj|_|jj|_|jjddg�xP|jD]F}t	|t
�rr|j|j�qVt	|t
�r�|j|j�qVt	|t�rV|j�qVW|jjddg�||_|S)Nr�r�files)r0r�Z
show_emptyZinlineZ
inline_headerZinline_aliasZinline_limitrirfrrZ
parseMenunamer;rZ
parseFilename�
DesktopFileIDr3ZparseSeparator)r	r$r�rorrrZ__addLayout�s$







zMenuEditor.__addLayoutcCs�|s|r>|r|jj|�d}n|r.|jj|�}|jj||�n|jj|�|j|jdd��}t|t�r�|jj|�|j	j|�|j
||jd�nt|t�r�|j
|�|s�|r�|j|�|j||j�dS)NrTr�)rfrg�insertrir:r<rrrhrN�_MenuEditor__addXmlFilenamer�rZ
addSubmenu�_MenuEditor__addLayout�_MenuEditor__addXmlLayoutr0)r	r$ror+r,rg�
xml_parentrrrZ
__addEntry�s"



zMenuEditor.__addEntrycCs�|jj|�|j|jdd��}t|t�rR|jj|�|jj|�|j||j	d�nt|t
�rh|jj|�|sp|r�|j|�|j
||j�dS)NTr�)rf�remover:r<rrrNrhr�r�rrnr�r�r0)r	r$ror+r,r�rrrZ
__deleteEntry�s


zMenuEditor.__deleteEntrycCsNytj|�Wntk
r"YnXy|jj|�Wntk
rHYnXdS)N)rr��OSErrorr�
ValueError)r	rrrrZ__deleteFile�szMenuEditor.__deleteFilecCsxg}xT|jD]J}|jtjjjjkrD|jj�|_|jj�sV|j	|�q|j
�r|j|�qWx|D]}|jj
|�q`WdS)N)rr�rrrr�Z	TEXT_NODE�data�stripriZ
hasChildNodesrr\r])r	r^Zremove_listr�rrrZ__remove_whilespace_nodes�s

z$MenuEditor.__remove_whilespace_nodes)NNF)NNF)NNNNNNN)NNNNN)NN)NN)NN)NN)NN)NNNNNNNN)NNNNNN)TN)r�)NN)NN)(�__name__�
__module__�__qualname__r
rrr.r2r5r9r>r?r@r!r1rXrYrZr_rcrjrkrlrmrarrr r:r�rUr�r=r�r[r�r"r6rbrrrrrrsJ
	




	




*
3
	




r)�__doc__Zxdg.MenuZxdg.BaseDirectoryZxdg.ExceptionsZxdg.DesktopEntryZ
xdg.ConfigZxml.dom.minidomrrrvrrrrr�<module>s