403Webshell
Server IP : 209.205.66.10  /  Your IP : 216.73.216.173
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ammon 5.15.0-186-generic #196-Ubuntu SMP Sat Jun 20 16:09:34 UTC 2026 x86_64
User :  ( 1006)
PHP Version : 8.5.8
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib/python3/dist-packages/xdg/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/xdg/__pycache__/Menu.cpython-310.pyc
o

��_���@s�dZddlZddlZddlZddlZddlZzddlmmZWne	y3ddl
mmZYnwddlm
Z
mZddlmZddlmZddlmZddlZddlZdd�Zd	d
�ZdZdZd
ZdZdZdZGdd�d�Z Gdd�d�Z!Gdd�d�Z"Gdd�d�Z#Gdd�d�Z$Gdd�d�Z%Gdd�d�Z&d\Z'Z(d d!�Z)d"d#�Z*d$d%�Z+d&d'�Z,Gd(d)�d)e-�Z.Gd*d+�d+�Z/d/d-d.�Z0dS)0a�
Implementation of the XDG Menu Specification
http://standards.freedesktop.org/menu-spec/

Example code:

from xdg.Menu import parse, Menu, MenuEntry

def print_menu(menu, tab=0):
  for submenu in menu.Entries:
    if isinstance(submenu, Menu):
      print ("	" * tab) + unicode(submenu)
      print_menu(submenu, tab+1)
    elif isinstance(submenu, MenuEntry):
      print ("	" * tab) + unicode(submenu.DesktopEntry)

print_menu(parse())
�N)�
xdg_data_dirs�xdg_config_dirs)�DesktopEntry)�ParsingError)�PY3cCsDtjdkrt�|�}tjdkrt�|�St�|�Stj|t��d�S)N)��)r���id�ctx)�sys�version_info�ast�literal_eval�Constant�NameConstant�Name�Load)�name�r�*/usr/lib/python3/dist-packages/xdg/Menu.py�
_ast_const's




rcCs"tst|t�r|�d�}t�|�S)zgWrapper around locale.strxfrm that accepts unicode strings on Python 2.

    See Python bug #2481.
    zutf-8)r�
isinstance�unicode�encode�locale�strxfrm)�srrr�_strxfrm2s

r�Deleted�	NoDisplay�Hidden�Empty�	NotShowIn�NoExecc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
	d(dd�Zd(dd�Zdd�Z
d)dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Z	d#d$�Zd%d&�Zd'S)*�Menuz^Menu containing sub menus under menu.Entries

    Contains both Menu and MenuEntry items.
    cCs�d|_d|_g|_d|_d|_d|_d|_d|_d|_d|_	g|_
d|_d|_g|_
g|_d|_g|_g|_d|_g|_g|_dS)N�rFT)r�	Directory�Entries�Doc�Filename�Depth�Parent�NotInXml�Show�Visible�AppDirs�
DefaultLayoutr �Directories�
DirectoryDirs�Layout�MenuEntries�Moves�OnlyUnallocated�Rules�Submenus��selfrrr�__init__Is*
z
Menu.__init__cC�|jS�N�rr;rrr�__str__e�zMenu.__str__cCs�|jD]}|j�|�q|jD]}|j�|�q|jD]}|j�|�q|jdur-|j|_|jdur6|j|_|jr=|j|_|jrD|j|_|jD]}|j�|�qG|j	D]}|j	�|�qS|j
D]}|�|�q_|Sr?)r1�appendr4r3r r8r5r2r9r7r:�
addSubmenu)r<�other�dir�	directory�rule�move�submenurrr�__add__hs*







zMenu.__add__cCst�|��|���Sr?)r�strcoll�getName�r<rErrr�__cmp__�szMenu.__cmp__cCst|���S�z&Key function for locale-aware sorting.)rrMr;rrr�_key�sz	Menu._keycC�,z|��}Wn	tyYnw|��|kSr?�rQ�AttributeErrorrNrrr�__lt__���zMenu.__lt__cCs2z|jt|�kWSty|jt|�kYSwr?)rr�	NameError�strrNrrr�__eq__�s
�zMenu.__eq__Fccs.�|jD]}|r|Vq|jdur|VqdS)z4Interator for a list of Entries visible to the user.TN)r)r/)r<�show_hidden�entryrrr�
getEntries�s�

��zMenu.getEntriescCsB|jD]}|j|kr|Sq|r|jD]
}|�||�qdSdS)z4Searches for a MenuEntry with a given DesktopFileID.N)r6�
DesktopFileIDr:�getMenuEntry)r<�
desktopfileid�deep�	menuentryrJrrrr^�s

�
�zMenu.getMenuEntrycCsP|�dd�}|jD]}|j|dkr%t|�dkr!|�|d�S|Sq	dS)z&Searches for a Menu with a given path.�/�rN)�splitr:r�len�getMenu)r<�path�arrayrJrrrrf�s
��zMenu.getMenucCsv|}g}	|r|�|j�n|�|���|jdkr|j}nnq|��d}|s-|�d�|D]	}tj�	||�}q/|S)z/Returns this menu's path in the menu structure.rcrr')
rCrrMr,r-�reverse�pop�osrg�join)r<�org�toplevel�parent�namesrgrrrr�getPath�s"
�	
zMenu.getPathcCs(z|jj��WSty|jYSw)z"Returns the menu's localised name.)r(rrMrTrr;rrrrM�s

�zMenu.getNamecC�$z|jj��WStyYdSw)z Returns the menu's generic name.r')r(r�getGenericNamerTr;rrrrs��
�zMenu.getGenericNamecCrr)z Returns the menu's comment text.r')r(r�
getCommentrTr;rrrru�rtzMenu.getCommentcCrr)z0Returns the menu's icon, filename or simple namer')r(r�getIconrTr;rrrrv�rtzMenu.getIconcCs2g|_d|_|jD]}|��q	t�}t�}|jjD]}|ddkr*|�|d�q|ddkr7|�|d�q|jjD]�}|ddkrat|�}t	|j�dkrZt
|jdt�rZd|_|j�|�q<|ddkrw|�
|d�}|rv|j�|�q<|ddkr�|�|d�}|r�|jjr�|�|�q<|j�|�q<|ddkr�|dd	ks�|dd
kr�|j��|jD]
}|j|vr�|j�|�q�q<|ddks�|dd
kr�|j��|jD]}|j|vr�|jjr�|�|�q�|j�|�q�q<|jD]�}d|_|jd7_t
|t��r>|jdu�rt|_|jd8_q�t
|jt��r=|jj���r,t|_|jd8_q�|jj���r=t|_|jd8_q�t
|t��r�|j���rUt|_|jd8_q�|j���rft|_|jd8_q�|j���r}|j���s}t |_|jd8_q�t!j"j#�r�|j�$�gk�r�t!j"j#|j�$�v�s�t!j"j#|j�%�v�r�t&|_|jd8_q�t
|t��r�|jd8_q�t	|j�dk�r�t
|jdt��r�d|jd_t	|j�dk�r�t
|jdt��r�d|jd_|jdd�D]*}t
|t��r|jj'�s|jdk�rt(|_|jd8_|j)du�r|j�*|��q�dS)
Nrr+rc�Menuname�	Separator���F�Merge�files�all�menusT)+r)r0r:�sort�setr5�order�addrxrerr/rCr^rf�inline�merge_inliner6r]rr&r �DELETEDr(�	MenuEntryr�getNoDisplay�
NO_DISPLAY�	getHidden�HIDDEN�
getTryExec�findTryExec�NO_EXEC�xdg�Config�
windowmanager�
getOnlyShowIn�getNotShowIn�NOT_SHOW_IN�
show_empty�EMPTYr.�remove)r<rJ�	_submenus�_entriesr��	separatorrar[rrrr~�s�

���


��


�
�
��"��z	Menu.sortcCsD|jD]
}||kr||7}dSq|j�|�||_|jd|_dS)Nrc)r:rCr-r,)r<�newmenurJrrrrDTs
�zMenu.addSubmenucCs�t|j�dkr9|jjr9|jd}|jjd|��dd�|jjd|��dd�|jjd|��dd�|j�	|�dSt|j�|jj
ksH|jj
dkrl|jjr^t|��|��|���}|j�	|�|jD]}|j�	|�qadS|j�	|�dS)	z}Appends a submenu's entries to this menu
        See the <Menuname> section of the spec about the "inline" attribute
        rcrrT)r�GenericName�CommentN)
rer)r5�inline_aliasrrrMrsrurC�inline_limit�
inline_header�Header)r<rJra�headerr[rrrr�_s

�zMenu.merge_inlineN�F)FF)�__name__�
__module__�__qualname__�__doc__r=rArKrOrQrUrYr\r^rfrqrMrsrurvr~rDr�rrrrr&Ds,"

	

dr&c@s"eZdZdZddd�Zdd�ZdS)	�MovezA move operationr'cCs||_||_dSr?)�Old�New)r<�old�newrrrr=u�
z
Move.__init__cCst|j|j�Sr?)�cmpr�rNrrrrOyszMove.__cmp__N�r'r')r�r�r�r�r=rOrrrrr�ss
r�c@s8eZdZdZ		ddd�Zedd��Zejd	d��Zd
S)r5zMenu Layout classFrTcCs:||_||_||_||_||_g|_ddgddgg|_dS)Nrzr}r{)r�r�r�r�r��_order�_default_order)r<r�r�r�r�r�rrrr=s
�zLayout.__init__cCs|jr|jS|jSr?)r�r�r;rrrr���zLayout.ordercC�
||_dSr?)r�)r<r�rrrr��s
N)FFrTF)r�r�r�r�r=�propertyr��setterrrrrr5}s
�
r5c@s<eZdZdZd\ZZedd��Zdd�Zdd�Z	d	d
�Z
dS)�RulezInclude / Exclude Rules Class�rrcc	Cs`tjtjt�|�t��gtjtjdt��d�dt��d�gd�ddd�}t�|�t	||�}|S)	Nrar
r]��value�attrr��left�ops�comparatorsrcr)�body�lineno�
col_offset)
r�
Expression�Compare�Str�Eq�	Attributerr�fix_missing_locationsr�)�cls�type�filename�treerHrrr�fromFilename�s��	�

zRule.fromFilenamecCs ||_||_t|jdd�|_dS)Nz<compiled-menu-rule>�eval)�Type�
expression�compile�code)r<r�r�rrrr=�sz
Rule.__init__cCst�|j�Sr?)r�dumpr�r;rrrrA�szRule.__str__cCsV|D]&}|dkr|jdus|jdurqt|j�r(|jtjur%d|_d|_qd|_q|S)N�TF)�MatchedInclude�	Allocatedr�r�r�r��TYPE_INCLUDE�Add)r<�menuentries�runrarrr�apply�s

�z
Rule.applyN)r�r�r�r�r��TYPE_EXCLUDE�classmethodr�r=rAr�rrrrr��s
r�c@s�eZdZdZdZdZdZddd�Zdd	�Zd
d�Z	dd
�Z
ddd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�ZdS) r�z(Wrapper for 'Menu Style' Desktop Entries�User�System�Bothr'cCsVttj�||��|_|�|||�d|_d|_g|_d|_d|_	d|_
|j��|_dS�NTF)
rrkrgrl�
setAttributesr/�Original�Parentsr�r�r��
getCategories�
Categories�r<r�rF�prefixrrrr=�szMenuEntry.__init__cCs|jjr|j��dSdS)z&Save any changes to the desktop entry.N)r�tainted�writer;rrr�save�s�zMenuEntry.savecCs|jj�|jd�S)z7Return the directory containing the desktop entry file.r')rr��replacer+r;rrr�getDir�r�zMenuEntry.getDircCs6tjjs|jr
|jStd|jjvr|jS|j	S|jS)z.Return the type of MenuEntry, System/User/Bothr)
r�r��	root_moder��	TYPE_BOTHrrr��	TYPE_USER�TYPE_SYSTEMr;rrr�getType�szMenuEntry.getTypecCsD||_||_tj�||��dd�|_tj�|jj	�s |�
�dSdS)Nrb�-)r+�Prefixrkrgrlr�r]�isabsrr��_MenuEntry__setFilenamer�rrrr��s�zMenuEntry.setAttributescCs4|��|jkrt|j|��|j�|_|��dSdSr?)r�r�r�r+r�r�r�r�r;rrr�updateAttributes�s�zMenuEntry.updateAttributescCs^tjjs	td}ntd}|j��dkrtj�|d�}ntj�|d�}tj�||j	�|j_
dS)Nrrc�Application�applications�desktop-directories)r�r�r�rrr�rkrgrlr+r�)r<rg�dir_rrr�
__setFilenames
zMenuEntry.__setFilenamecCst�|j��|j���Sr?)rrLrrMrNrrrrOszMenuEntry.__cmp__cCst|j���SrP)rrrMr;rrrrQszMenuEntry._keycCrRr?rSrNrrrrUrVzMenuEntry.__lt__cCs|jt|�kr	dSdSr�)r]rXrNrrrrYszMenuEntry.__eq__cCr>r?)r]r;rrr�__repr__"rBzMenuEntry.__repr__Nr�)r�r�r�r�r�r�r�r=r�r�r�r�r�r�rOrQrUrYr�rrrrr��s"


r�c@seZdZdZdd�ZdS)rxz!Just a dummy class for SeparatorscCs||_d|_dS)NT)r-r/)r<rorrrr=(r�zSeparator.__init__N)r�r�r�r�r=rrrrrx&srxc@s eZdZdZdd�Zdd�ZdS)r�zClass for Inline HeaderscCs||_||_||_dSr?)rr�r�)r<r�generic_name�commentrrrr=/s
zHeader.__init__cCr>r?r@r;rrrrA4rBzHeader.__str__N)r�r�r�r�r=rArrrrr�-sr�r�cCsvtj�|�}tj�|�stj�||�}tj�|�}tj�|�s!dS|tkr-tj�|�r-|S|t	kr9tj�
|�r9|SdS�NF)rkrg�dirnamer�rl�abspath�exists�TYPE_DIR�isdir�	TYPE_FILE�isfile)r�r�r�rgrrr�_check_file_path;srcCsPtt�}tjjdur|�d�|D]}tj�|d|�}tj�	|�r%|SqdS)NTrr})
�listrr�r�r�rjrkrgrlr)r��dirs�d�menunamerrr�_get_menu_file_pathIs
��r
cCst|t�r|S|��dkS)N�true)r�bool�lower)r�rrr�_to_boolSs
rcs*i�|���fdd�|D�}|��|S)Ncs g|]}|�vr��||��qSr)�
setdefault)�.0�e��_setrr�
<listcomp>]s z_dedupe.<locals>.<listcomp>)ri)�_listrrr�_dedupeZs
rc@s�eZdZd3dd�Zd4dd�Zdd�Zd4d	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�ZdS)5�XMLMenuBuilderFcCr�r?)�debug)r<rrrrr=ds
zXMLMenuBuilder.__init__NcCs|rtj�|�st|�}|s*tj�dd�d}t|�}|s*tj�dd�d}t|�}|s3tdd|��|�d�s=td|��zt�	|�}Wntd	|��t
�|_t
�|_t
�|_|�|��|�}||_||_|�|�|�|�|�|�|�|�|��|S)
z�Load an applications.menu file.

        filename : str, optional
          The default is ``$XDG_CONFIG_DIRS/menus/${XDG_MENU_PREFIX}applications.menu``.
        �XDG_MENU_PREFIXr'�applications.menuzdebian-menu.menu�File not foundz/etc/xdg/menus/%s�.menuzNot a .menu file�Not a valid .menu file)rkrgr�r
�environ�getr�endswith�etree�parser�
_merged_files�_directory_dirs�MenuEntryCache�cache�
parse_menu�getrootr�r��handle_moves�
post_parse�generate_not_only_allocated�generate_only_allocatedr~)r<r��	candidater��menurrrr"gs<�






zXMLMenuBuilder.parsecCst�}|�|||�|Sr?)r&�
parse_node)r<�noder�r.rrrr'�szXMLMenuBuilder.parse_menuc	Csbt|�}|D�]'}|j|j}}|r|��nd}|dkr(|�||�}|�|�q|dkr6|r6|�|||�q|dkrA|�||�q|dkrO|rO|�|||�q|dkrZ|�	||�q|dkrd|rd||_
q|dkrq|rq|j�|�q|dkryd	|_
q|d
kr�d|_
q|dkr�d	|_q|d
kr�d|_q|dks�|dkr�|j�|�|��q|dkr�|j�dd�dkr�|�d|||�q|r�|�||||�q|dkr�|r�|�||||�q|dkr�|�|||�q|dkr�|j�|�|��q|dkr�|dkr�|�|�|_q|dk�r
|dk�r|�|�|_q|dk�r#|�r#|�||j�dd�||�q|dk�r.|�||�qdS)Nr&�AppDir�DefaultAppDirs�DirectoryDir�DefaultDirectoryDirsrr(r8T�NotOnlyUnallocatedFr �
NotDeleted�Include�Exclude�	MergeFiler�ror�MergeDir�DefaultMergeDirsr�r5rcr2�	LegacyDirr�r'�
KDELegacyDirs)re�tag�text�stripr'rD�
parse_app_dir�parse_default_app_dir�parse_directory_dir�parse_default_directory_dirrr3rCr8r r9�
parse_rule�attribr�parse_merge_file�parse_merge_dir�parse_default_merge_dirsr7�
parse_move�parse_layoutr5r2�parse_legacy_dir�parse_kde_legacy_dirs)	r<r0r�ro�num_children�childr>r?r.rrrr/�sn
��

�
��zXMLMenuBuilder.parse_nodecCsLtt|j�dd��t|j�dd��t|j�dd��t|j�dd��t|j�dd��d	�}g}|D]p}|j|j}}|r?|��nd}|d
krw|rw|�d
|t|j�dd��t|j�dd��t|j�dd��t|j�dd��t|j�dd��g�q0|dkr�|�dg�q0|dkr�|r�|�d|g�q0|d
kr�|�d
|j�dd�g�q0||_	|S)Nr�Fr�r�rr�Tr�)r�r�r�r�r�rwrxr+rzr�r|)
r5rrFr�intr>r?r@rCr�)r<r0�layoutr�rOr>r?rrrrK�sB��	��zXMLMenuBuilder.parse_layoutcCs\d\}}|D]"}|j|j}}|r|��nd}|dkr |r |}q|dkr(|r(|}qt||�S)Nr�r�r�)r>r?r@r�)r<r0r�r�rOr>r?rrrrJ�s�
zXMLMenuBuilder.parse_movecCs^|jdkrtjntj}tjddd�}|�|t���}|r ||_nt	d�|_t�
|�t||�S)Nr7rcr)r�r��False)r>r�r�r�rr��
parse_bool_op�Orr�rr�)r<r0r�r��exprrrrrEs


zXMLMenuBuilder.parse_rulecCsVg}|D]}|�|�}|r|�|�qt|�}|dkr!t�||�S|dkr)|dSdS)Nrcr)�parse_rule_noderCrer�BoolOp)r<r0�operator�valuesrOrH�
num_valuesrrrrSs

�zXMLMenuBuilder.parse_bool_opcCs|j}|dkr|�|t���S|dkr|�|t���S|dkr3|�|t���}|r1t�t��|�SdS|dkr;td�S|dkr`|j}tj	t�
|�t��gtjtj
dt��d�d	t��d
�gd�S|dkr�|j}tj	t�
|�t��gtjtj
dt��d�d
t��d
�gd�SdS)NrT�And�Not�All�True�Categoryrar
r�r�r�r+r])r>rSrrTr[�UnaryOpr\rr?r�r��Inr�rrr�)r<r0r>rU�categoryr�rrrrVsB��	���zXMLMenuBuilder.parse_rule_nodecC�$t||t�}|r|j�|�dSdSr?)rrr1rC�r<r�r�rorrrrAA��zXMLMenuBuilder.parse_app_dircC�*tt�D]}|�tj�|d�||�qdS)Nr�)�reversedrrArkrgrl�r<r�rorrrrrBF��z$XMLMenuBuilder.parse_default_app_dircCrcr?)rrr4rCrdrrrrCJrez"XMLMenuBuilder.parse_directory_dircCrf)Nr�)rgrrCrkrgrlrhrrrrDOriz*XMLMenuBuilder.parse_default_directory_dircCs�|j�dd�dkr@tD]2}|�|d��d�}||kr=tD] }||kr#qtj�tj�||��r<|�	tj�||�||�nqqdSt
||t�}|rQ|�	|||�dSdS)Nr�ror'rb)rFrrr�r@rkrgrrl�
merge_filerr)r<r�rOr�ror�rel_file�prrrrGUs"���
�zXMLMenuBuilder.parse_merge_filec	Cs`t||t�}|r,t�|�D] }z|�d�r!|�tj�||�||�Wq
ty+Yq
wdSdS)Nr)	rrrk�listdirr rjrgrl�UnicodeDecodeError)r<r�rOr�ro�itemrrrrHes
���zXMLMenuBuilder.parse_merge_dirc	CsJtj�tj�|��d}tt�D]}|�tj�|d|d�|||�qdS)Nrr}z-merged)rkrg�splitext�basenamergrrHrl)r<rOr�rorqrrrrrIos"�z'XMLMenuBuilder.parse_default_merge_dirscCs�||jvr|jr
td|��dS|j�|�zt�|�}Wnty.|jr+td|��YdS|jr9td|��YdS|��}|�|||�dS)Nz Infinite MergeFile loop detectedrr)	r#rrr�r!r"�IOErrorr(r/)r<r�rOror��rootrrrrjts"



zXMLMenuBuilder.merge_filecCs$|�||||�}|r||7}dSdSr?)�merge_legacy_dir)r<r�r�r�ro�mrrrrL�s�zXMLMenuBuilder.parse_legacy_dirc	CsJt||t�}|r�||jvr�|j�|�t�}|j�|�|j�|�tj	�
|�|_d|_t�
|�D]3}z(|dkr?|j�|�ntj	�tj	�||��rZ|�|�tj	�||�|||��Wq1tydYq1w|j�|g|d�|j�|gd�}|D]&}|j}	t|	�dkr�t�tj|j�}
|j�|
�||jvr�|	�d�|	|_qx|SdSdS)NTz
.directoryFr�Legacy)rrr$r�r&r1rCr4rkrgrqrr.rmr3rrlrDrtrnr&�add_menu_entries�get_menu_entriesr�rer�r�r�r]r9)r<r�r�r�roruror�ra�
categories�rrrrrt�sH���

��zXMLMenuBuilder.merge_legacy_dircCs�ztjgd�tjdd�}|��d��}Wn
tyYdSwz|d�d�D]
}|�|d||�q(WdSty?YdSw)N)z
kde-configz--path�appsT)�stdout�universal_newlinesr�:�kde)	�
subprocess�Popen�PIPE�communicate�
splitlines�OSErrorrdrL�
IndexError)r<r�ro�proc�outputr�rrrrM�s"����z$XMLMenuBuilder.parse_kde_legacy_dirscCs�|jdurd|_|jdurd|_|jr|jsI|jr|j|_n+|jr1|jdkr,|jj|_nt�|_n|jdkrA|jj|_|jj|_nt�|_t�|_|jdkr^|jj|j|_|jj|j|_t|j	�|_	t|j�|_t|j�|_|j
D]}|�|�qs|j	��|j��|j��|j	D]8}|jD],}t
j�t
j�||��r�t||�}|js�||_q�|��tjkr�|j��tjkr�||j_q�|jr�dSq�dS)NFr)r r8r5r2r,r-r1r4rr3r:r*rirkrgrrlr�r(r�r�r�r�)r<r.rJrGrFrarrrr*�sR














���zXMLMenuBuilder.post_parsecCs�|jD]}|�|�q|jdurF|j�|j�g}|jD]
}|�|j�|j�d�}q|D]}|j	durE|j
�|�d|_	d|_|j
�|�q,dSdS)NFrcT)r:r+r8r&rwr1r9r�rxr�r�rCr�r6�r<r.rJr�rHrarrrr+s 



��z*XMLMenuBuilder.generate_not_only_allocatedcCs�|jD]}|�|�q|jdur@|j�|j�g}|jD]
}|�|j�|j�d�}q|D]}|j	dur?|j
�|�|j�|�q,dSdS)NTr�)
r:r,r8r&rwr1r9r�rxr�r�rCr6r�rrrr,s



��z&XMLMenuBuilder.generate_only_allocatedc	Cs�|jD]}|�|�q|jD]Y}|�|j�}|rg|�|j�}|j�d�}d}t|�dkr\|s0|}|�|d�}|sOt�}|d|_	t|�dkrJd|_
|�|�|}|�d�t|�dks,||7}|j
j�|�qdS)NrbrrcT)r:r)r7rfr�r�rdrer&rr.rDrjr-r�)	r<r.rJrI�move_from_menu�move_to_menur}�	oldparentr�rrrr)$s2




�
��zXMLMenuBuilder.handle_movesr�r?)r�r�r�r=r"r'r/rKrJrErSrVrArBrCrDrGrHrIrjrLrtrMr*r+r,r)rrrrrbs2

6
4"

$
&9rc@s4eZdZdZdd�Zddd�Zdd	�Zddd�Zd
S)r%zClass to cache Desktop EntriescCsi|_g|jd<i|_dS)N�legacy)�cacheEntriesr&r;rrrr=Cs

zMenuEntryCache.__init__r'FcCs2|D]}||jvrg|j|<|�|d||�qdS)Nr')r��_MenuEntryCache__addFiles)r<rr�r�r�rrrrwHs

��zMenuEntryCache.add_menu_entriesc	Cs�t�tj�||��D]L}|�d�r;z
ttj�||�||�}Wn	ty'Yq
w|j|�|�|r:|jd�|�q
tj�	tj�|||��rV|sV|�
|tj�||�||�q
dS)Nz.desktopr�)rkrmrgrlr r�rr�rCrr�)r<r��subdirr�r�rorarrr�
__addFilesNs
����zMenuEntryCache.__addFilesTc
Cs�g}t�}|dd�}|r|�d�d�|�}z|j|WSty&Ynw|D]@}|j|D]8}z-|j|vrD|�|j�|�|�n|��t	j
kr^|�|�}	||	}
|
��t	jkr^||
_
Wq0tyhYq0wq)||j|<|S)Nr�r')rrCrlr&�KeyErrorr�r]r�r�r�r��indexr�r�rn)r<rr��entries�ids�appdirs�keyr�ra�idxr[rrrrx\s:

�

���

zMenuEntryCache.get_menu_entriesN)r'F)T)r�r�r�r�r=rwr�rxrrrrr%As
r%FcCst|��|�S)zYHelper function.
    Equivalent to calling xdg.Menu.XMLMenuBuilder().parse(filename)
    )rr")r�rrrrr"{sr"r�)1r�rkrr�rr
�xml.etree.cElementTreer!�cElementTree�ImportError�xml.etree.ElementTree�ElementTree�xdg.BaseDirectoryrr�xdg.DesktopEntryr�xdg.Exceptionsr�xdg.utilr�
xdg.Localer��
xdg.Configrrr�r�r�r�r�r�r&r�r5r�r�rxr�rrrr
rr�objectrr%r"rrrr�<module>sZ�
1
/b
b:

Youez - 2016 - github.com/yon3zu
LinuXploit