ó
    Öu•c*  ã                   ód   • S r SSKrSSKrSSKrSSKrSSKrSSKJr   " S S5      r	 " S S5      r
g)zo
Implementation of the XDG Recent File Storage Specification
http://standards.freedesktop.org/recent-file-spec
é    N)ÚParsingErrorc                   óT   • \ rS rSrS rSS jrS rSS jrSS jrSS jr	S	 r
S
 rSrg)ÚRecentFilesé
   c                 ó    • / U l         SU l        g )NÚ ©r   Úfilename©Úselfs    Ú1/usr/lib/python3/dist-packages/xdg/RecentFiles.pyÚ__init__ÚRecentFiles.__init__   s   € ØˆÔØˆ�ó    Nc                 ó  • U(       d4  [         R                  R                  [         R                  " S5      S5      n [        R
                  R                  R                  U5      nXl        UR                   H³  nUR                  [        R
                  R                   R"                  :X  d  M7  UR$                  S:X  d  MI  UR                   HZ  nUR                  [        R
                  R                   R"                  :X  d  M7  UR$                  S:X  d  MI  U R'                  U5        M\     Mµ     U R)                  5         g! [         a    [        SU5      e[        R                  R                  R                   a    [        SU5      ef = f)zQParse 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   ÚRecentFiles.parse   s  € ö
 Ü—w‘w—|‘|¤B§I¢I¨fÓ$5Ð7GÓHˆHð	CÜ—'‘'—/‘/×'Ñ'¨Ó1ˆCð !Œà—^”^ˆEØ�~‰~¤§¡§¡×!:Ñ!:Õ:Ø—=‘= MÕ1Ø"'×"2Ô"2˜Ø!Ÿ?™?¬c¯g©g¯l©l×.GÑ.GÕGØ%Ÿ~™~°Õ=Ø $× 6Ñ 6°vÖ >ó #3ñ $ð 	�	‰	�øô ó 	;ÜÐ/°Ó:Ð:Ü�{‰{× Ñ ×+Ñ+ó 	CÜÐ7¸ÓBÐBð	Cús   ½)E  Å A
F
c                 ó~  • [        5       nU R                  R                  U5        UR                   GH‡  nUR                  [
        R                  R                  R                  :X  d  M8  UR                  S:X  a   UR                  S   R                  Ul        Mh  UR                  S:X  a   UR                  S   R                  Ul        M˜  UR                  S:X  a)  [        UR                  S   R                  5      Ul        MÑ  UR                  S:X  a	  SUl        Mê  UR                  S:X  d  Mü  UR                   H{  nUR                  [
        R                  R                  R                  :X  d  M7  UR                  S:X  d  MI  UR                   R                  UR                  S   R                  5        M}     GMŠ     g )	NÚURIr   z	Mime-TypeÚ	TimestampÚPrivateTÚGroupsÚGroup)Ú
RecentFiler   Úappendr!   r"   r   r   r#   r$   r%   Ú	nodeValuer-   ÚMimeTypeÚintr.   ÚPrviater0   )r   Úitemr*   Ú	attributeÚgroups        r   Ú__parseRecentItemÚRecentFiles.__parseRecentItem*   s;  € Ü“ˆØ×Ñ×Ñ Ô'àŸ�ˆIØ×!Ñ!¤S§W¡W§\¡\×%>Ñ%>Õ>Ø×$Ñ$¨Ó-Ø!*×!5Ñ!5°aÑ!8×!BÑ!B�F–JØ×&Ñ&¨+Ó5Ø&/×&:Ñ&:¸1Ñ&=×&GÑ&G�F–OØ×&Ñ&¨+Ó5Ü'*¨9×+?Ñ+?ÀÑ+B×+LÑ+LÓ'M�FÖ$Ø×&Ñ&¨)Ó3Ø%)�F–NØ×&Ñ&¨(Õ2à!*×!5Ô!5˜Ø Ÿ>™>¬S¯W©W¯\©\×-FÑ-FÕFØ$Ÿ}™}°Õ7Ø &§¡× 4Ñ 4°U×5EÑ5EÀaÑ5H×5RÑ5RÖ Sô "6ò )r   c                 ó.  • U(       d  U R                   (       d  [        SU5      eU(       d  U R                   n[        US5       n[        R                  " U[        R
                  5        UR                  S5        UR                  S5        U R                   GH*  nUR                  S5        UR                  S[        R                  R                  R                  UR                  5      -  5        UR                  SUR                  -  5        UR                  SUR                  -  5        UR                  S	:X  a  UR                  S
5        [!        UR"                  5      S:”  aI  UR                  S5        UR"                   H  nUR                  SU-  5        M     UR                  S5        UR                  S5        GM-     UR                  S5        [        R                  " U[        R$                  5        SSS5        g! , (       d  f       g= f)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-   r5   r.   r/   Úlenr0   ÚLOCK_UN)r   r
   ÚfÚrr:   s        r   rC   ÚRecentFiles.write?   sp  € ö  §§ÜÐ/°Ó:Ð:ÞØ—}‘}ˆHä�(˜CÔ  AÜ�KŠK˜œ5Ÿ=™=Ô)Ø�G‰GÐ-Ô.Ø�G‰GÐ%Ô&à×%Õ%�Ø—‘Ð*Ô+Ø—‘Ð-´·±×0@Ñ0@×0GÑ0GÈÏÉÓ0NÑNÔOØ—‘Ð9¸A¿J¹JÑFÔGØ—‘Ð9¸A¿K¹KÑGÔHØ—9‘9 Ó$Ø—G‘GÐ.Ô/Ü�q—x‘x“= 1Ó$Ø—G‘GÐ,Ô-Ø!"§¤˜ØŸ™Ð ;¸eÑ CÖDñ "*à—G‘GÐ-Ô.Ø—‘Ð+×,ñ &ð �G‰GÐ&Ô'Ü�KŠK˜œ5Ÿ=™=Ô)÷) !× Ö ús   ÁF9HÈ
Hc                 ó€  • / nSnU R                    H©  nU(       a1  U H*  nXvR                  ;   d  M  UR                  U5        US-  nM,     O^U(       a1  U H*  nX†R                  :X  d  M  UR                  U5        US-  nM,     O&UR                  S:X  a  UR                  U5        US-  nUS:w  d  M¡  XS:X  d  M¨    U$    U$ )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   r0   r3   r5   r/   )	r   Ú	mimetypesÚgroupsÚlimitÚtmpÚir8   r:   Úmimetypes	            r   ÚgetFilesÚRecentFiles.getFiles`   sµ   € ð ˆØˆØ×$Ô$ˆDÞÛ#�EØ§¡Õ+ØŸ
™
 4Ô(Ø˜Q™šò $ö Û )�HØ§=¡=Õ0ØŸ
™
 4Ô(Ø˜Q™šò !*ð
 —<‘< 5Ó(Ø—J‘J˜tÔ$Ø˜‘F�AØ˜�z˜a�jØàˆ
ñ% %ð$ ˆ
r   c                 óÌ  • XR                   ;   a+  U R                   R                  U5      nU R                   U   nOX[        U R                   5      S:X  a  U R                   R                  5         [	        5       nU R                   R                  U5        Xl        X&l        [        [        R                  " 5       5      Ul
        XFl        U(       a  X6l        U R                  5         g)zeAdd a recently used file.

item should be the URI of the file, typically starting with ``file:///``.
iô  N)r   ÚindexrG   Úpopr2   r3   r-   r5   r6   Útimer.   r/   r0   r'   )r   r8   rS   rO   ÚprivaterW   r*   s          r   ÚaddFileÚRecentFiles.addFile}   s«   € ð ×#Ñ#Ó#Ø×$Ñ$×*Ñ*¨4Ó0ˆEØ×%Ñ% eÑ,‰Fô �4×#Ñ#Ó$¨Ó+Ø× Ñ ×$Ñ$Ô&ä“\ˆFØ×Ñ×#Ñ# FÔ+àŒ
Ø"ŒÜœtŸyšy›{Ó+ˆÔØ ŒÞØ"ŒMà�	‰	�r   c                 óZ   • XR                   ;   a  U R                   R                  U5        gg)z<Remove a recently used file, by URI, from the list.
        N)r   Úremove)r   r8   s     r   Ú
deleteFileÚRecentFiles.deleteFile—   s)   € ð ×#Ñ#Ó#Ø×Ñ×#Ñ# DÕ)ð $r   c                 ól   • U R                   R                  5         U R                   R                  5         g ©N)r   r'   Úreverser   s    r   r'   ÚRecentFiles.sort�   s&   € Ø×Ñ×ÑÔØ×Ñ× Ñ Õ"r   r	   rb   )NNr   )NF)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r&   rC   rT   r[   r_   r'   Ú__static_attributes__© r   r   r   r   
   s,   † òôò6Tô**ôBô:ò4*õ#r   r   c                   ó2   • \ rS rSrS rS rS rS rS rSr	g)	r2   é¢   c                 óJ   • SU l         SU l        SU l        SU l        / U l        g )Nr   F)r-   r5   r.   r/   r0   r   s    r   r   ÚRecentFile.__init__£   s%   € ØˆŒØˆŒØˆŒØˆŒØˆ�r   c                 óB   • [        U R                  UR                  5      $ rb   )Úcmpr.   ©r   Úothers     r   Ú__cmp__ÚRecentFile.__cmp__ª   s   € Ü�4—>‘> 5§?¡?Ó3Ð3r   c                 ó4   • U R                   UR                   :  $ rb   )r.   rq   s     r   Ú__lt__ÚRecentFile.__lt__­   s   € Ø�~‰~ §¡Ñ/Ð/r   c                 ó2   • U R                   [        U5      :H  $ rb   )r-   Ústrrq   s     r   Ú__eq__ÚRecentFile.__eq__°   s   € Ø�x‰xœ3˜u›:Ñ%Ð%r   c                 ó   • U R                   $ rb   )r-   r   s    r   Ú__str__ÚRecentFile.__str__³   s   € Ø�x‰xˆr   )r0   r5   r/   r.   r-   N)
re   rf   rg   rh   r   rs   rv   rz   r}   ri   rj   r   r   r2   r2   ¢   s   † òò4ò0ò&õr   r2   )Ú__doc__Úxml.dom.minidomr   Úxml.sax.saxutilsr   rY   r@   Úxdg.Exceptionsr   r   r2   rj   r   r   Ú<module>rƒ      s/   ðñ÷
 )ß Ó Ý '÷U#ñ U#÷pò r   