B
    '‹dT  ã               @   sŠ  d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	m	Z	 d dl
Z
yd dlmZ W n  ek
r|   d dlmZ Y nX d dlmZmZ d dlmZ d dlmZ yejZejZW n$ ek
rÚ   dd	„ Zd
d„ ZY nX dZdZdZe e dd¡¡Ze ed¡Z ee ƒZ!e "¡ Z#dZ$dee#ƒ %d¡ Z&dd„ Z'dd„ Z(dd„ Z)dd„ Z*d,dd„Z+d d!„ Z,d"d#„ Z-d$d%„ Z.d&d'„ Z/d(d)„ Z0d*d+„ Z1dS )-é    )Úunicode_literalsN)Údatetime)Úquote)Ú	text_typeÚenvironb)Úpreprocess_paths)ÚTrashPermissionErrorc             C   s   |   t ¡ ¡S )N)ÚencodeÚsysÚgetfilesystemencoding)Úu© r   úb/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/send2trash/plat_other.pyÚfsencode*   s    r   c             C   s   |   t ¡ ¡S )N)Údecoder
   r   )Úbr   r   r   Úfsdecode-   s    r   s   filess   infos
   .trashinfos   XDG_DATA_HOMEs   ~/.local/shares   Trashs   .Trashs   .Trash-Úasciic             C   sB   t  |¡}t|tƒrt|ƒ}t  | ¡} t| tƒr8t| ƒ} | | ¡S )N)ÚopÚrealpathÚ
isinstancer   r   Ú
startswith)ÚparentÚpathr   r   r   Ú	is_parentA   s    



r   c             C   s
   |   d¡S )Nz%Y-%m-%dT%H:%M:%S)Ústrftime)Údater   r   r   Úformat_dateK   s    r   c             C   s^   |d kst || ƒst | ¡} nt | |¡} d}|dt| ƒ d 7 }|dtt ¡ ƒ d 7 }|S )Nz[Trash Info]
zPath=Ú
zDeletionDate=)r   r   ÚabspathÚrelpathr   r   r   Únow)ÚsrcÚtopdirÚinfor   r   r   Úinfo_forO   s    r%   c             C   s   t  | ¡st | d¡ d S )NiÀ  )r   ÚexistsÚosÚmakedirs)Údirr   r   r   Úcheck_create]   s    
r*   Fc          	   C   sø   t  | ¡}t  |t¡}t  |t¡}t  |¡\}}d}	|}
xNt  t  ||
¡¡sbt  t  ||
t ¡¡r†|	d7 }	|d t|	ƒ 	d¡ | }
q:W t
|ƒ t
|ƒ tt  ||
t ¡dƒ}| t| |ƒ¡ W d Q R X t  ||
¡}|rèt | |¡ nt | |¡ d S )Nr   é   ó    r   Úw)r   ÚbasenameÚjoinÚ	FILES_DIRÚINFO_DIRÚsplitextr&   ÚINFO_SUFFIXr   r	   r*   ÚopenÚwriter%   ÚshutilÚmover'   Úrename)r"   Údstr#   Ú	cross_devÚfilenameZ	filespathZinfopathÚ	base_nameÚextÚcounterZdestnameÚfZdestpathr   r   r   Ú
trash_movec   s"    
*r@   c             C   s,   t  | ¡} xt  | ¡s&t  | ¡d } qW | S )Nr   )r   r   ÚismountÚsplit)r   r   r   r   Úfind_mount_point{   s    
rC   c             C   s„   t  | t¡}t  |¡sd S t |¡j}t  |¡rDt  |¡sD|t	j
@ sHd S t  |ttƒ d¡¡}yt|ƒ W n tk
r~   d S X |S )Nr   )r   r/   ÚTOPDIR_TRASHr&   r'   ÚlstatÚst_modeÚisdirÚislinkÚstatÚS_ISVTXr   Úuidr	   r*   ÚOSError)Úvolume_rootÚ	trash_dirÚmoder   r   r   Úfind_ext_volume_global_trash„   s    
rP   c          
   C   sX   t  | t¡}yt|ƒ W n: tk
rR } z|jtjkr@t|jƒ‚‚ W d d }~X Y nX |S )N)	r   r/   ÚTOPDIR_FALLBACKr*   rL   ÚerrnoÚEACCESr   r;   )rM   rN   Úer   r   r   Úfind_ext_volume_fallback_trash™   s    
rU   c             C   s   t | ƒ}|d krt| ƒ}|S )N)rP   rU   )rM   rN   r   r   r   Úfind_ext_volume_trash¦   s    rV   c             C   s   t  | ¡jS )N)r'   rE   Úst_dev)r   r   r   r   Úget_dev®   s    rX   c             C   s6  t | ƒ} x&| D ]}t|tƒr*t|ƒ}n t|tƒr:|}ntdt|ƒ ƒ‚t |¡sdt	t
jd| ƒ‚t |tj¡s‚t	t
jd| ƒ‚t|ƒ}tt d¡ƒ}||krªt}t}n,t|ƒ}t|ƒ}||krÎt	d| ƒ‚t|ƒ}yt|||ƒ W q t	k
r, } z&|j
t
jkrt|ttdd n‚ W d d }~X Y qX qW d S )Nz'str, bytes or PathLike expected, not %rzFile not found: %szPermission denied: %só   ~z Couldn't find mount point for %sT)r:   )r   r   r   r   ÚbytesÚ	TypeErrorÚtyper   r&   rL   rR   ÚENOENTr'   ÚaccessÚW_OKrS   rX   Ú
expanduserÚXDG_DATA_HOMEÚHOMETRASH_BrC   rV   r@   ÚEXDEV)Úpathsr   Zpath_bZpath_devZ	trash_devr#   Z
dest_trashÚerrorr   r   r   Ú
send2trash²   s6    



rf   )NF)2Ú
__future__r   rR   r
   r'   r6   Úos.pathr   r   r   rI   Úurllib.parser   ÚImportErrorÚurllibZsend2trash.compatr   r   Zsend2trash.utilr   Zsend2trash.exceptionsr   r   r   ÚAttributeErrorr0   r1   r3   r`   Úgetra   r/   rb   Z	HOMETRASHÚgetuidrK   rD   r	   rQ   r   r   r%   r*   r@   rC   rP   rU   rV   rX   rf   r   r   r   r   Ú<module>   sP   


	