o
    ¯bw  ã                   @   s`   d dl Z d dlmZ G dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG d	d
„ d
ejƒZdS )é    N)Úpbc                   @   s€   e Zd Zdd„ Zdd„ Zdd„ Zdd„ ZeZd	d
„ ZeZ	dd„ Z
e
Zdd„ ZeZdd„ ZeZdd„ ZeZdd„ ZeZdd„ ZdS )ÚMaildirc                 C   s    || _ || _tj ||¡| _d S ©N)ÚvirtualDirectoryÚrootDirectoryÚosÚpathÚjoinÚ	directory)Úselfr
   r   © r   ú1/usr/lib/python3/dist-packages/twisted/mail/pb.pyÚ__init__   s   zMaildir.__init__c                 C   sV   d|v r
t d| ƒ‚ttj | jd|¡ƒ�}| ¡ W  d   ƒ S 1 s$w   Y  d S )Nú/z&can only open files in '%s' directory'Únew)ÚOSErrorÚopenr   r   r	   r
   Úread)r   ÚfolderÚnameÚfpr   r   r   ÚgetFolderMessage   s
   $ÿzMaildir.getFolderMessagec              	   C   sB   d|v r
t d| ƒ‚t tj | j||¡tj | jd||¡¡ d S )Nr   z(can only delete files in '%s' directory'z.Trash)r   r   Úrenamer   r	   r
   r   )r   r   r   r   r   r   ÚdeleteFolderMessage   s   þzMaildir.deleteFolderMessagec                 C   ó   |   d|¡S ©Nr   ©r   ©r   r   r   r   r   ÚdeleteNewMessage   ó   zMaildir.deleteNewMessagec                 C   r   ©NÚcurr   r   r   r   r   ÚdeleteCurMessage#   r   zMaildir.deleteCurMessagec                 C   ó   t  t j | jd¡¡S r   ©r   Úlistdirr   r	   r
   ©r   r   r   r   ÚgetNewMessages(   ó   zMaildir.getNewMessagesc                 C   r#   r    r$   r&   r   r   r   ÚgetCurMessages-   r(   zMaildir.getCurMessagesc                 C   r   r   ©r   r   r   r   r   ÚgetNewMessage2   r   zMaildir.getNewMessagec                 C   r   r    r*   r   r   r   r   ÚgetCurMessage7   r   zMaildir.getCurMessagec                 C   s`   |d dkr
t dƒ‚| dd¡}| jdkrd| }n| jd | }|  |¡s*t dƒ‚t|| jƒS )Nr   Ú.z&subfolder name cannot begin with a '.'r   ú:znot a subfolder)r   ÚreplaceÚvirtualDirectoyr   Ú_isSubFolderr   r   r   r   r   r   ÚgetSubFolder<   s   


zMaildir.getSubFolderc                 C   s6   t j t j | j|¡¡ pt j t j | j|d¡¡ S )NÚmaildirfolder)r   r   Úisdirr	   r   Úisfiler   r   r   r   r1   J   s
   ÿþzMaildir._isSubFolderN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Úremote_deleteNewMessager"   Úremote_deleteCurMessager'   Úremote_getNewMessagesr)   Úremote_getCurMessagesr+   Úremote_getNewMessager,   Úremote_getCurMessager2   Úremote_getSubFolderr1   r   r   r   r   r   
   s&    r   c                   @   s,   e Zd Zdd„ Zdd„ ZeZdd„ ZeZdS )ÚMaildirCollectionc                 C   s
   || _ d S r   )Úroot)r   rA   r   r   r   r   Q   s   
zMaildirCollection.__init__c                 C   s   t  |  ¡ ¡S r   )r   r%   ÚgetRootr&   r   r   r   ÚgetSubFoldersT   s   zMaildirCollection.getSubFoldersc                 C   s4   d|v s
|d dkrt dƒ‚tdtj |  ¡ |¡ƒS )Nr   r   r-   zinvalid name)r   r   r   r   r	   rB   r   r   r   r   r2   Y   s   zMaildirCollection.getSubFolderN)r6   r7   r8   r   rC   Úremote_getSubFoldersr2   r?   r   r   r   r   r@   P   s    r@   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚMaildirBrokerc                 C   s0   |   ¡ }|d u r|  |d¡ d S |  ||¡ d S )Nzpermission denied)Ú_getCollectionÚ	sendErrorÚ
sendAnswer)r   Ú	requestIDr   ÚdomainÚpasswordÚ
collectionr   r   r   Úproto_getCollectionb   s   z!MaildirBroker.proto_getCollectionc                 C   sF   || j vrd S | j | }||jv r|j| |kr!t| |¡ƒS d S d S r   )ÚdomainsÚdbmr@   ÚuserDirectory)r   r   rJ   rK   r   r   r   ÚgetCollectioni   s   

ÿzMaildirBroker.getCollectionN)r6   r7   r8   rM   rQ   r   r   r   r   rE   a   s    rE   c                   @   s   e Zd Zdd„ ZdS )ÚMaildirClientc                 C   s,   |   ¡ }||f| j|< |  d||||¡ d S )NrQ   )ÚnewRequestIDÚwaitingForAnswersÚsendCall)r   r   rJ   rK   ÚcallbackÚerrbackrI   r   r   r   rQ   r   s   zMaildirClient.getCollectionN)r6   r7   r8   rQ   r   r   r   r   rR   q   s    rR   )	r   Útwisted.spreadr   ÚReferenceabler   r@   ÚBrokerrE   rR   r   r   r   r   Ú<module>   s   F