o '8_*@sXdZddlZddlZddlZddlZddlZddlmZGdddZ GdddZ dS)zo Implementation of the XDG Recent File Storage Specification http://standards.freedesktop.org/recent-file-spec N) ParsingErrorc@sTeZdZddZdddZddZddd Zdd d ZdddZddZ ddZ dS) RecentFilescCsg|_d|_dS)N)rfilenameselfr1/usr/lib/python3/dist-packages/xdg/RecentFiles.py__init__ s zRecentFiles.__init__NcCs|s tjtdd}z tjj|}Wnty!t d|tj j j y/t d|w||_ |jD]'}|jtjjjkr]|jdkr]|jD]}|jtjjjkr\|jdkr\||qHq6|dS)ziParse a list of recently used files. filename defaults to ``~/.recently-used``. HOMEz.recently-usedFile not foundzNot a valid .menu filer RecentItemN)ospathjoingetenvxmldomminidomparseIOErrorrparsersexpat ExpatErrorr childNodesnodeTypeNode ELEMENT_NODEtagName_RecentFiles__parseRecentItemsort)rrdocchildrecentrrr rs&         zRecentFiles.parsecCst}|j||jD]^}|jtjjjkrj|j dkr#|jdj |_ q |j dkr0|jdj |_ q |j dkr?t |jdj |_q |j dkrHd|_q |j dkrj|jD]}|jtjjjkri|j dkri|j|jdj qPq dS) NURIrz Mime-Type TimestampPrivateTGroupsGroup) RecentFilerappendrrrrrrr nodeValuer$MimeTypeintr%Prviater')ritemr# attributegrouprrr __parseRecentItem*s&         zRecentFiles.__parseRecentItemcCs2|s |js td||s|j}t|d{}t|tj|d|d|jD]Q}|d|dtj j |j |d|j |d|j|jd krW|d t|jd kru|d |jD] }|d |qf|d|dq)|dt|tjWddS1swYdS)zWrite 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 z z z %s z %s z %s Tz rz z %s z z z N)rropenfcntllockfLOCK_EXwriterrsaxsaxutilsescaper$r,r%r&lenr'LOCK_UN)rrfrr1rrr r8?s0              "zRecentFiles.writerc Csg}d}|jD]G}|r|D]}||jvr|||d7}q n$|r5|D]}||jkr3|||d7}q#n|jdkrC|||d7}|dkrN||krN|Sq|S)zGet 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. rF)rr'r*r,r&) r mimetypesgroupslimittmpir/r1mimetyperrr getFiles`s2       zRecentFiles.getFilesFcCs||jvr|j|}|j|}nt|jdkr|jt}|j|||_||_tt |_ ||_ |r;||_ | dS)z}Add a recently used file. item should be the URI of the file, typically starting with ``file:///``. iN)rindexr<popr)r*r$r,r-timer%r&r'r )rr/rFrBprivaterHr#rrr addFile}s      zRecentFiles.addFilecCs||jvr |j|dSdS)zs