B
    fd2;                 @   s  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mZ d dl	m
Z
mZ eeZeedddZeedd	d
ZeedddZeedddZG dd deZG dd deZejejejejejhZeee ZdZdZ G dd dZ!G dd deZ"G dd dZ#dS )    N)IntEnum)BytesIO)List)BytesString)sreturnc             C   s   t |  dS )zEncode bytes into a URL-safe Base64 string without padding

    Parameters:
        s (``bytes``):
            Bytes to encode

    Returns:
        ``str``: The encoded bytes
    =)base64urlsafe_b64encodedecodestrip)r    r   4/tmp/pip-unpacked-wheel-rcokkf2l/pyrogram/file_id.py
b64_encode   s    
r   c             C   s   t | dt|  d   S )zDecode a URL-safe Base64 string without padding to bytes

    Parameters:
        s (``str``):
            String to decode

    Returns:
        ``bytes``: The decoded string
    r	      )r
   urlsafe_b64decodelen)r   r   r   r   
b64_decode,   s    
r   c             C   s^   g }d}x:| D ]2}|s |d7 }q|r6| d|f d}|| qW |rV| d|f t|S )zZero-value RLE encoder

    Parameters:
        s (``bytes``):
            Bytes to encode

    Returns:
        ``bytes``: The encoded bytes
    r      )extendappendbytes)r   rnbr   r   r   
rle_encode9   s    


r   c             C   sJ   g }d}x8| D ]0}|sd}q|r4| d|  d}q|| qW t|S )zZero-value RLE decoder

    Parameters:
        s (``bytes``):
            Bytes to decode

    Returns:
        ``bytes``: The decoded bytes
    FT)r   )r   r   r   )r   r   zr   r   r   r   
rle_decodeV   s    

r   c               @   sX   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdS )FileTypezKnown file typesr   r         r               	   
                        N)__name__
__module____qualname____doc__	THUMBNAIL
CHAT_PHOTOPHOTOZVOICEZVIDEODOCUMENT	ENCRYPTEDTEMPZSTICKERZAUDIOZ	ANIMATIONENCRYPTED_THUMBNAIL	WALLPAPERZ
VIDEO_NOTEZ
SECURE_RAWSECUREZ
BACKGROUNDZDOCUMENT_AS_FILEr   r   r   r   r   q   s&   r   c               @   s$   e Zd ZdZdZdZdZdZdZdS )ThumbnailSourcezKnown thumbnail sourcesr   r   r    r!   r   N)	r/   r0   r1   r2   LEGACYr3   CHAT_PHOTO_SMALLCHAT_PHOTO_BIGSTICKER_SET_THUMBNAILr   r   r   r   r<      s   r<   i   i   c               @   s   e Zd ZdZdZeedddddddddddddddeeeeeeeeee	eeeeeeeeddd	Z
eed
ddZdddeedddZdd ZdS )FileIdr          N )majorminorfile_referenceurlmedia_idaccess_hash	volume_idthumbnail_sourcethumbnail_file_typethumbnail_sizesecretlocal_idchat_idchat_access_hashsticker_set_idsticker_set_access_hash)rE   rF   	file_typedc_idrG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   c            C   sp   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _d S )N)rE   rF   rU   rV   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   )selfrE   rF   rU   rV   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   r   r   r   __init__   s$    zFileId.__init__)file_idc             C   s  t t| }|d }|dk r2d}t|d d }n|d }t|d d }td|d\}}t|t@ }t|t@ }|t M }|t M }yt	|}W n( t
k
r   t
d| d|  Y nX |rt|}	td	|d\}
t|||||	|
d
S |rt|nd}td|d\}}
|tkrtd	|d\}|dk rNdntd|d\}yt|}W n* t
k
r   t
d| d|  Y nX |tjkrtd|d\}}t|||||||
||||dS |tjkr&td|d\}}}t|}t|||||||
|||||dS |tjtjfkrptd|d\}}}t|||||||
|||||dS |tjkrtd|d\}}}t|||||||
|||||dS |tkrt|||||||
dS d S )Nr   r   z<iir%   zUnknown file_type z of file_id z<q)rE   rF   rU   rV   rH   rJ   rC   z<qqr-   )r   z<izUnknown thumbnail_source z<qir)   )rE   rF   rU   rV   rG   rI   rJ   rK   rL   rO   rP   z<iii)rE   rF   rU   rV   rG   rI   rJ   rK   rL   rM   rN   rP   z<qqi   )rE   rF   rU   rV   rG   rI   rJ   rK   rL   rQ   rR   rP   )rE   rF   rU   rV   rG   rI   rJ   rK   rL   rS   rT   rP   )rE   rF   rU   rV   rG   rI   rJ   )r   r   r   structunpackreadboolWEB_LOCATION_FLAGFILE_REFERENCE_FLAGr   
ValueErrorr   rA   r   PHOTO_TYPESr<   r=   r3   chrr>   r?   r@   DOCUMENT_TYPES)rY   decodedrE   rF   bufferrU   rV   Zhas_web_locationZhas_file_referencerH   rJ   rG   rI   rK   rL   rO   rP   rM   rN   rQ   rR   rS   rT   r   r   r   r      s    



"
zFileId.decode)rE   rF   c            C   s  |d k	r|n| j }|d k	r|n| j}t }| j}| jr>|tO }| jrL|tO }|t	
d|| j | jrx|t| j | jr|t| j |t	
d| j| j | jtkr|t	
d| j |dkr|t	
d| j | jtjkr
|t	
d| j| j n| jtjkr:|t	
d| jt| j| j n\| jtjtjfkrl|t	
d| j| j| j n*| jtjkr|t	
d| j | j!| j n|t"kr|t	
d|| |t	
d	|| t#t$|% S )
Nz<iiz<qqz<qr   z<iz<qiz<iiiz<qqiz<bb)&rE   rF   r   rU   rH   ra   rG   rb   writer]   packrV   r   r   rI   rJ   rd   rK   rL   r<   r=   rO   rP   r3   rM   ordrN   r>   r?   rQ   rR   r@   rS   rT   rf   r   r   getvalue)rW   rE   rF   rh   rU   r   r   r   encodeT  sT    
zFileId.encodec             C   s   t dd | j D S )Nc             S   s   i | ]\}}|d k	r||qS )Nr   ).0kvr   r   r   
<dictcomp>  s    z"FileId.__str__.<locals>.<dictcomp>)str__dict__items)rW   r   r   r   __str__  s    zFileId.__str__)r/   r0   r1   ZMAJORZMINORintr   r   rr   r<   rX   staticmethodr   rm   ru   r   r   r   r   rA      s.   6 <rA   c               @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	FileUniqueTypezKnown file unique typesr   r   r    r!   r   r"   N)
r/   r0   r1   r2   WEBr5   r6   r;   r7   r8   r   r   r   r   rx     s   rx   c               @   sP   e Zd ZdddddeeeeedddZeedddZd	d
 Z	dd Z
dS )FileUniqueIdN)rH   rI   rK   rP   )file_unique_typerH   rI   rK   rP   c            C   s"   || _ || _|| _|| _|| _d S )N)r{   rH   rI   rK   rP   )rW   r{   rH   rI   rK   rP   r   r   r   rX     s
    zFileUniqueId.__init__)file_unique_idc             C   s   t tt| }td|d\}yt|}W n( tk
rX   td| d|  Y nX |tjkrzt	|}t
||dS |tjkrtd| \}}t
|||dS |tjkrtd| \}t
||d	S td
| d|  d S )Nz<ir   zUnknown file_unique_type z of file_unique_id )r{   rH   z<qi)r{   rK   rP   z<q)r{   rI   z%Unknown decoder for file_unique_type )r   r   r   r]   r^   r_   rx   rc   ry   r   rz   r5   r6   )r|   rh   r{   rH   rK   rP   rI   r   r   r   r     s.    



zFileUniqueId.decodec             C   s   | j tjkr$td| j t| j}nT| j tjkrHtd| j | j| j	}n0| j tj
krhtd| j | j}ntd| j  tt|S )Nz<isz<iqiz<iqz%Unknown encoder for file_unique_type )r{   rx   ry   r]   rj   r   rH   r5   rK   rP   r6   rI   rc   r   r   )rW   stringr   r   r   rm     s    zFileUniqueId.encodec             C   s   t dd | j D S )Nc             S   s   i | ]\}}|d k	r||qS )Nr   )rn   ro   rp   r   r   r   rq     s    z(FileUniqueId.__str__.<locals>.<dictcomp>)rr   rs   rt   )rW   r   r   r   ru     s    zFileUniqueId.__str__)r/   r0   r1   rx   rr   rv   rX   rw   r   rm   ru   r   r   r   r   rz     s   %rz   )$r
   loggingr]   enumr   ior   typingr   Zpyrogram.raw.corer   r   	getLoggerr/   logr   rr   r   r   r   r   r   r<   r3   r4   r5   r:   r9   rd   setrf   ra   rb   rA   rx   rz   r   r   r   r   <module>   s,   

 z
