B
    ‹aï  ã               @   s‚  d dl m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
rt   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)„ Z/d*d+„ Z0dS )-é    )Úunicode_literalsN)Údatetime)Úquoteé   )Ú	text_typeÚenvironb)Úpreprocess_paths)ÚTrashPermissionErrorc             C   s   |   t ¡ ¡S )N)ÚencodeÚsysÚgetfilesystemencoding)Úu© r   ú4lib/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_parent@   s    



r   c             C   s
   |   d¡S )Nz%Y-%m-%dT%H:%M:%S)Zstrftime)Zdater   r   r   Úformat_dateJ   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   Znow)ÚsrcÚtopdirÚinfor   r   r   Úinfo_forN   s    r#   c             C   s   t  | ¡st | d¡ d S )NiÀ  )r   ÚexistsÚosÚmakedirs)Údirr   r   r   Úcheck_create\   s    
r(   c          	   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 | t  ||	¡¡ d S )Nr   r   ó    r   Úw)r   ÚbasenameÚjoinÚ	FILES_DIRÚINFO_DIRÚsplitextr$   ÚINFO_SUFFIXr   r
   r(   ÚopenÚwriter#   r%   Úrename)r    Údstr!   ÚfilenameZ	filespathZinfopathZ	base_nameZextZcounterZdestnameÚfr   r   r   Ú
trash_moveb   s    
r7   c             C   s,   t  | ¡} xt  | ¡s&t  | ¡d } qW | S )Nr   )r   r   ÚismountÚsplit)r   r   r   r   Úfind_mount_pointx   s    
r:   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    
rG   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(   rC   ÚerrnoZEACCESr	   r5   )rD   rE   Úer   r   r   Úfind_ext_volume_fallback_trash–   s    
rK   c             C   s   t | ƒ}|d krt| ƒ}|S )N)rG   rK   )rD   rE   r   r   r   Úfind_ext_volume_trash£   s    rL   c             C   s   t  | ¡jS )N)r%   r<   Úst_dev)r   r   r   r   Úget_dev«   s    rN   c             C   sô   t | ƒ} xæ| D ]Þ}t|tƒr&t|ƒ}n6t|tƒr6|}n&t|dƒrLt| ¡ ƒS tdt	|ƒ ƒ‚t
 |¡srtd| ƒ‚t |tj¡sŒtd| ƒ‚t|ƒ}tt
 d¡ƒ}||kr´t}t}n,t|ƒ}t|ƒ}||krØtd| ƒ‚t|ƒ}t|||ƒ qW d S )NÚ
__fspath__z'str, bytes or PathLike expected, not %rzFile not found: %szPermission denied: %só   ~z Couldn't find mount point for %s)r   r   r   r   ÚbytesÚhasattrÚ
send2trashrO   Ú	TypeErrorÚtyper   r$   rC   r%   ÚaccessÚW_OKrN   Ú
expanduserÚXDG_DATA_HOMEÚHOMETRASH_Br:   rL   r7   )Úpathsr   Zpath_bZpath_devZ	trash_devr!   Z
dest_trashr   r   r   rS   ¯   s0    





rS   )N)1Z
__future__r   rI   r   r%   Zos.pathr   r   r   r@   Zurllib.parser   ÚImportErrorZurllibÚcompatr   r   Úutilr   Ú
exceptionsr	   r   r   ÚAttributeErrorr-   r.   r0   rX   ÚgetrY   r,   rZ   Z	HOMETRASHÚgetuidrB   r;   r
   rH   r   r   r#   r(   r7   r:   rG   rK   rL   rN   rS   r   r   r   r   Ú<module>   sN   


	