§
    Öu•c*  ã                   ór   — d Z ddlZddlZddlZddlZddlZddlmZ  G d„ d¦  «        Z	 G d„ d¦  «        Z
dS )zo
Implementation of the XDG Recent File Storage Specification
http://standards.freedesktop.org/recent-file-spec
é    N)ÚParsingErrorc                   óF   — e Zd Zd„ Zdd„Zd„ Zdd„Zdd„Zdd	„Zd
„ Z	d„ Z
dS )ÚRecentFilesc                 ó"   — g | _         d| _        d S )NÚ )r   Úfilename©Úselfs    ú1/usr/lib/python3/dist-packages/xdg/RecentFiles.pyÚ__init__zRecentFiles.__init__   s   € ØˆÔØˆŒˆˆó    Nc                 óv  — |s2t           j                             t          j        d¦  «        d¦  «        }	 t          j        j                             |¦  «        }nF# t          $ r t          d|¦  «        ‚t          j
        j        j        $ r t          d|¦  «        ‚w xY w|| _        |j        D ]u}|j        t          j        j        j        k    rT|j        dk    rI|j        D ]A}|j        t          j        j        j        k    r |j        dk    r|                      |¦  «         ŒBŒv|                      ¦   «          dS )ziParse a list of recently used files.
        
        filename defaults to ``~/.recently-used``.
        ÚHOMEz.recently-usedúFile not foundzNot a valid .menu filer   Ú
RecentItemN)ÚosÚpathÚjoinÚgetenvÚxmlÚdomÚminidomÚparseÚIOErrorr   ÚparsersÚexpatÚ
ExpatErrorr   Ú
childNodesÚnodeTypeÚNodeÚELEMENT_NODEÚtagNameÚ_RecentFiles__parseRecentItemÚsort)r
   r   ÚdocÚchildÚrecents        r   r   zRecentFiles.parse   s<  € ð
 ð 	IÝ”w—|’|¥B¤I¨fÑ$5Ô$5Ð7GÑHÔHˆHð	CÝ”'”/×'Ò'¨Ñ1Ô1ˆCˆCøÝð 	;ð 	;ð 	;ÝÐ/°Ñ:Ô:Ð:ÝŒ{Ô Ô+ð 	Cð 	Cð 	CÝÐ7¸ÑBÔBÐBð	Cøøøð !ˆŒà”^ð 	?ð 	?ˆEØŒ~¥¤¤Ô!:Ò:Ð:Ø”= MÒ1Ð1Ø"'Ô"2ð ?ð ?˜Ø!œ?­c¬g¬lÔ.GÒGÐGØ%œ~°Ò=Ð=Ø $× 6Ò 6°vÑ >Ô >Ð >øøà�	Š	‰Œˆˆˆs   ¶$A ÁABc                 ó�  — t          ¦   «         }| j                             |¦  «         |j        D �]}|j        t
          j        j        j        k    rò|j	        dk    r|j        d         j
        |_        ŒE|j	        dk    r|j        d         j
        |_        Œh|j	        dk    r%t          |j        d         j
        ¦  «        |_        Œ˜|j	        dk    rd|_        Œ«|j	        dk    r^|j        D ]V}|j        t
          j        j        j        k    r5|j	        dk    r*|j                             |j        d         j
        ¦  «         ŒW�Œd S )	NÚURIr   z	Mime-TypeÚ	TimestampÚPrivateTÚGroupsÚGroup)Ú
RecentFiler   Úappendr   r   r   r   r    r!   r"   Ú	nodeValuer)   ÚMimeTypeÚintr*   ÚPrviater,   )r
   Úitemr'   Ú	attributeÚgroups        r   Ú__parseRecentItemzRecentFiles.__parseRecentItem*   sC  € Ý‘”ˆØÔ×Ò Ñ'Ô'Ð'àœð 	Tñ 	TˆIØÔ!¥S¤W¤\Ô%>Ò>Ð>ØÔ$¨Ò-Ð-Ø!*Ô!5°aÔ!8Ô!B�F”J�JØÔ&¨+Ò5Ð5Ø&/Ô&:¸1Ô&=Ô&G�F”O�OØÔ&¨+Ò5Ð5Ý'*¨9Ô+?ÀÔ+BÔ+LÑ'MÔ'M�FÔ$Ð$ØÔ&¨)Ò3Ð3Ø%)�F”N�NØÔ&¨(Ò2Ð2à!*Ô!5ð Tð T˜Ø œ>­S¬W¬\Ô-FÒFÐFØ$œ}°Ò7Ð7Ø &¤× 4Ò 4°UÔ5EÀaÔ5HÔ5RÑ SÔ SÐ Søùð	Tð 	Tr   c                 óü  — |s| j         st          d|¦  «        ‚|s| j         }t          |d¦  «        5 }t          j        |t          j        ¦  «         |                     d¦  «         |                     d¦  «         | j        D �]*}|                     d¦  «         |                     dt          j	        j
                             |j        ¦  «        z  ¦  «         |                     d|j        z  ¦  «         |                     d|j        z  ¦  «         |j        d	k    r|                     d
¦  «         t!          |j        ¦  «        dk    rL|                     d¦  «         |j        D ]}|                     d|z  ¦  «         Œ|                     d¦  «         |                     d¦  «         �Œ,|                     d¦  «         t          j        |t          j        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z³Write the list of recently used files to disk.
        
        If the instance is already associated with a file, filename can be
        omitted to save it there again.
        r   Úwz<?xml version="1.0"?>
z<RecentFiles>
z  <RecentItem>
z    <URI>%s</URI>
z    <Mime-Type>%s</Mime-Type>
z    <Timestamp>%s</Timestamp>
Tz    <Private/>
r   z    <Groups>
z      <Group>%s</Group>
z    </Groups>
z  </RecentItem>
z</RecentFiles>
N)r   r   ÚopenÚfcntlÚlockfÚLOCK_EXÚwriter   r   ÚsaxÚsaxutilsÚescaper)   r1   r*   r+   Úlenr,   ÚLOCK_UN)r
   r   ÚfÚrr6   s        r   r>   zRecentFiles.write?   s*  € ð ð 	% ¤ð 	%ÝÐ/°Ñ:Ô:Ð:Øð 	%Ø”}ˆHå�(˜CÑ Ô ð 	* AÝŒK˜�5œ=Ñ)Ô)Ð)Ø�GŠGÐ-Ñ.Ô.Ð.Ø�GŠGÐ%Ñ&Ô&Ð&àÔ%ð -ñ -�Ø—’Ð*Ñ+Ô+Ð+Ø—’Ð-µ´Ô0@×0GÒ0GÈÌÑ0NÔ0NÑNÑOÔOÐOØ—’Ð9¸A¼JÑFÑGÔGÐGØ—’Ð9¸A¼KÑGÑHÔHÐHØ”9 Ò$Ð$Ø—G’GÐ.Ñ/Ô/Ð/Ý�q”x‘=”= 1Ò$Ð$Ø—G’GÐ,Ñ-Ô-Ð-Ø!"¤ð Eð E˜ØŸšÐ ;¸eÑ CÑDÔDÐDÐDØ—G’GÐ-Ñ.Ô.Ð.Ø—’Ð+Ñ,Ô,Ð,Ñ,à�GŠGÐ&Ñ'Ô'Ð'ÝŒK˜�5œ=Ñ)Ô)Ð)ð)	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   ³F1G1Ç1G5Ç8G5r   c                 ó8  — g }d}| j         D ]�}|r)|D ]%}||j        v r|                     |¦  «         |dz  }Œ&nR|r+|D ]'}||j        k    r|                     |¦  «         |dz  }Œ(n%|j        dk    r|                     |¦  «         |dz  }|dk    r||k    r nŒŽ|S )zþGet a list of recently used files.
        
        The parameters can be used to filter by mime types, by group, or to
        limit the number of items returned. By default, the entire list is
        returned, except for items marked private.
        r   é   F)r   r,   r/   r1   r+   )	r
   Ú	mimetypesÚgroupsÚlimitÚtmpÚir4   r6   Úmimetypes	            r   ÚgetFileszRecentFiles.getFiles`   sò   € ð ˆØˆØÔ$ð 	ð 	ˆDØð Ø#ð ð �EØ ¤Ð+Ð+ØŸ
š
 4Ñ(Ô(Ð(Ø˜Q™˜øðð ð Ø )ð ð �HØ 4¤=Ò0Ð0ØŸ
š
 4Ñ(Ô(Ð(Ø˜Q™˜øðð
 ”< 5Ò(Ð(Ø—J’J˜tÑ$Ô$Ð$Ø˜‘F�AØ˜Šzˆz˜a 5šj˜jØ�øàˆ
r   Fc                 óÈ  — || j         v r(| j                              |¦  «        }| j         |         }nYt          | j         ¦  «        dk    r| j                              ¦   «          t	          ¦   «         }| j                              |¦  «         ||_        ||_        t          t          j	        ¦   «         ¦  «        |_
        ||_        |r||_        |                      ¦   «          dS )z}Add a recently used file.
        
        item should be the URI of the file, typically starting with ``file:///``.
        iô  N)r   ÚindexrB   Úpopr.   r/   r)   r1   r2   Útimer*   r+   r,   r$   )r
   r4   rM   rI   ÚprivaterP   r'   s          r   ÚaddFilezRecentFiles.addFile}   sÏ   € ð �4Ô#Ð#Ð#ØÔ$×*Ò*¨4Ñ0Ô0ˆEØÔ% eÔ,ˆFˆFõ �4Ô#Ñ$Ô$¨Ò+Ð+ØÔ ×$Ò$Ñ&Ô&Ð&å‘\”\ˆFØÔ×#Ò# FÑ+Ô+Ð+àˆŒ
Ø"ˆŒÝ�tœy™{œ{Ñ+Ô+ˆÔØ ˆŒØð 	#Ø"ˆFŒMà�	Š	‰Œˆˆˆr   c                 óP   — || j         v r| j                              |¦  «         dS dS )z<Remove a recently used file, by URI, from the list.
        N)r   Úremove)r
   r4   s     r   Ú
deleteFilezRecentFiles.deleteFile—   s7   € ð �4Ô#Ð#Ð#ØÔ×#Ò# DÑ)Ô)Ð)Ð)Ð)ð $Ð#r   c                 ój   — | j                              ¦   «          | j                              ¦   «          d S ©N)r   r$   Úreverser	   s    r   r$   zRecentFiles.sort�   s2   € ØÔ×ÒÑÔÐØÔ× Ò Ñ"Ô"Ð"Ð"Ð"r   rY   )NNr   )NF)Ú__name__Ú
__module__Ú__qualname__r   r   r#   r>   rN   rT   rW   r$   © r   r   r   r   
   s¤   € € € € € ðð ð ðð ð ð ð6Tð Tð Tð**ð *ð *ð *ðBð ð ð ð:ð ð ð ð4*ð *ð *ð#ð #ð #ð #ð #r   r   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )r.   c                 óL   — d| _         d| _        d| _        d| _        g | _        d S )Nr   F)r)   r1   r*   r+   r,   r	   s    r   r   zRecentFile.__init__£   s)   € ØˆŒØˆŒØˆŒØˆŒØˆŒˆˆr   c                 ó6   — t          | j        |j        ¦  «        S rY   )Úcmpr*   ©r
   Úothers     r   Ú__cmp__zRecentFile.__cmp__ª   s   € Ý�4”> 5¤?Ñ3Ô3Ð3r   c                 ó"   — | j         |j         k     S rY   )r*   rc   s     r   Ú__lt__zRecentFile.__lt__­   s   € ØŒ~ ¤Ò/Ð/r   c                 ó2   — | j         t          |¦  «        k    S rY   )r)   Ústrrc   s     r   Ú__eq__zRecentFile.__eq__°   s   € ØŒx�3˜u™:œ:Ò%Ð%r   c                 ó   — | j         S rY   )r)   r	   s    r   Ú__str__zRecentFile.__str__³   s	   € ØŒxˆr   N)r[   r\   r]   r   re   rg   rj   rl   r^   r   r   r.   r.   ¢   s_   € € € € € ðð ð ð4ð 4ð 4ð0ð 0ð 0ð&ð &ð &ðð ð ð ð r   r.   )Ú__doc__Úxml.dom.minidomr   Úxml.sax.saxutilsr   rR   r;   Úxdg.Exceptionsr   r   r.   r^   r   r   ú<module>rq      sÂ   ððð ð
 )Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðU#ð U#ð U#ð U#ð U#ñ U#ô U#ð U#ðpð ð ð ð ñ ô ð ð ð r   