o
    -˜Žj};  ã                   @   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dedefdd	„Zdedefd
d„Zdedefdd„Zdedef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 )z´Encode 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   úM/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pyrogram/file_id.pyÚ
b64_encode    s   
r   c                 C   s   t  | dt| ƒ d   ¡S )z´Decode a URL-safe Base64 string without padding to bytes

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

    Returns:
        ``bytes``: The decoded string
    r	   é   )r
   Úurlsafe_b64decodeÚlenr   r   r   r   Ú
b64_decode-   s   
r   c                 C   sZ   g }d}| D ]}|s|d7 }q|r|  d|f¡ d}| |¡ q|r)|  d|f¡ t|ƒS )z’Zero-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_encode:   s   

r   c                 C   sF   g }d}| D ]}|sd}q|r|  d| ¡ d}q| |¡ qt|ƒS )z’Zero-value RLE decoder

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

    Returns:
        ``bytes``: The decoded bytes
    FT©r   r   )r   r   Úzr   r   r   r   Ú
rle_decodeW   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ÚPHOTOÚVOICEÚVIDEOÚDOCUMENTÚ	ENCRYPTEDÚTEMPÚSTICKERÚAUDIOÚ	ANIMATIONÚENCRYPTED_THUMBNAILÚ	WALLPAPERÚ
VIDEO_NOTEÚ
SECURE_RAWÚSECUREÚ
BACKGROUNDÚDOCUMENT_AS_FILEr   r   r   r   r"   r   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)	r2   r3   r4   r5   ÚLEGACYr6   ÚCHAT_PHOTO_SMALLÚCHAT_PHOTO_BIGÚSTICKER_SET_THUMBNAILr   r   r   r   rH   ˆ   s    rH   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œdeded	ed
edededededede	dedededededededef$dd„Z
edefdd„ƒZdddœdedef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_hashrQ   rR   Ú	file_typeÚdc_idrS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   c                C   sp   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _d S ©N)rQ   rR   ra   rb   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   )ÚselfrQ   rR   ra   rb   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   r   r   r   Ú__init__    s$   
zFileId.__init__Úfile_idc                 C   sÄ  t t| ƒƒ}|d }|dk rd}t|d d… ƒ}n|d }t|d d… ƒ}t d| d¡¡\}}t|t@ ƒ}t|t@ ƒ}|t M }|t M }zt	|ƒ}W n t
y]   t
d|› d| › �ƒ‚w |ryt |¡}	t d	| d¡¡\}
t|||||	|
d
�S |r€t |¡nd}t d| d¡¡\}}
|tv �rPt d	| d¡¡\}|dk r¢dnt d| d¡¡\}zt|ƒ}W n t
yÃ   t
d|› d| › �ƒ‚w |tjkrãt d| d¡¡\}}t|||||||
||||d�S |tjk�r	t d| d¡¡\}}}t|ƒ}t|||||||
|||||d�S |tjtjfv �r.t d| d¡¡\}}}t|||||||
|||||d�S |tjk�rPt d| d¡¡\}}}t|||||||
|||||d�S |tv �r`t|||||||
d�S d S )Néÿÿÿÿr   r   éþÿÿÿú<iir(   zUnknown file_type z of file_id ú<q)rQ   rR   ra   rb   rT   rV   rO   ú<qqr0   r   ú<izUnknown thumbnail_source ú<qir,   )rQ   rR   ra   rb   rS   rU   rV   rW   rX   r[   r\   ú<iii)rQ   rR   ra   rb   rS   rU   rV   rW   rX   rY   rZ   r\   ú<qqié   )rQ   rR   ra   rb   rS   rU   rV   rW   rX   r]   r^   r\   )rQ   rR   ra   rb   rS   rU   rV   rW   rX   r_   r`   r\   )rQ   rR   ra   rb   rS   rU   rV   )r!   r   r   ÚstructÚunpackÚreadÚboolÚWEB_LOCATION_FLAGÚFILE_REFERENCE_FLAGr"   Ú
ValueErrorr   rM   r   ÚPHOTO_TYPESrH   rI   r6   ÚchrrJ   rK   rL   ÚDOCUMENT_TYPES)rf   ÚdecodedrQ   rR   Úbufferra   rb   Úhas_web_locationÚhas_file_referencerT   rV   rS   rU   rW   rX   r[   r\   rY   rZ   r]   r^   r_   r`   r   r   r   r   È   sâ   

ÿ
ú	
 ÿ
õôôô
ùÿzFileId.decode)rQ   rR   c                C   sÎ  |d ur|n| j }|d ur|n| j}tƒ }| j}| jr|tO }| jr&|tO }| t	 
d|| j¡¡ | jr<| t| jƒ¡ | jrG| t| jƒ¡ | t	 
d| j| j¡¡ | jtv rÇ| t	 
d| j¡¡ |dkrp| t	 
d| j¡¡ | jtjkrƒ| t	 
d| j| j¡¡ nR| jtjkrš| t	 
d| jt| jƒ| j¡¡ n;| jtjtjfv r²| t	 
d| j| j| j¡¡ n#| jtjkrÆ| t	 
d| j | j!| j¡¡ n|t"v rÕ| t	 
d||¡¡ | t	 
d	||¡¡ t#t$| %¡ ƒƒS )
Nri   rk   rj   r   rl   rm   rn   ro   z<bb)&rQ   rR   r   ra   rT   ru   rS   rv   Úwriterq   Úpackrb   r   r   rU   rV   rx   rW   rX   rH   rI   r[   r\   r6   rY   ÚordrZ   rJ   rK   r]   r^   rL   r_   r`   rz   r   r   Úgetvalue)rd   rQ   rR   r|   ra   r   r   r   ÚencodeU  s\   
üüü€zFileId.encodec                 C   ó   t dd„ | j ¡ D ƒƒS )Nc                 S   ó   i | ]\}}|d ur||“qS rc   r   ©Ú.0ÚkÚvr   r   r   Ú
<dictcomp>’  ó    z"FileId.__str__.<locals>.<dictcomp>©ÚstrÚ__dict__Úitems©rd   r   r   r   Ú__str__‘  ó   zFileId.__str__)r2   r3   r4   ÚMAJORÚMINORÚintr"   r   r�   rH   re   Ústaticmethodr   rƒ   r‘   r   r   r   r   rM   œ   sz    íþýüûúùø	÷
öõôóòñðïî
í( <rM   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)
r2   r3   r4   r5   ÚWEBr8   r;   rE   r<   r=   r   r   r   r   r—   •  s    r—   c                   @   sX   e Zd Zdddddœdededededef
dd	„Zed
efdd„ƒZdd„ Z	dd„ Z
dS )ÚFileUniqueIdN)rT   rU   rW   r\   Úfile_unique_typerT   rU   rW   r\   c                C   s"   || _ || _|| _|| _|| _d S rc   )rš   rT   rU   rW   r\   )rd   rš   rT   rU   rW   r\   r   r   r   re      s
   
zFileUniqueId.__init__Úfile_unique_idc                 C   sÜ   t tt| ƒƒƒ}t d| d¡¡\}zt|ƒ}W n ty)   td|› d| › �ƒ‚w |tjkr:t	 |¡}t
||d�S |tjkrPt d| ¡ ¡\}}t
|||d�S |tjkrdt d| ¡ ¡\}t
||d	�S td
|› d| › �ƒ‚)Nrl   r   zUnknown file_unique_type z of file_unique_id )rš   rT   rm   )rš   rW   r\   rj   )rš   rU   z%Unknown decoder for file_unique_type )r   r!   r   rq   rr   rs   r—   rw   r˜   r   r™   r8   r;   )r›   r|   rš   rT   rW   r\   rU   r   r   r   r   ®  s6   ÿ

þ
ý
þzFileUniqueId.decodec                 C   s„   | j tjkrt d| j t| jƒ¡}n*| j tjkr$t d| j | j| j	¡}n| j tj
kr4t d| j | j¡}ntd| j › �ƒ‚tt|ƒƒS )Nz<isz<iqiz<iqz%Unknown encoder for file_unique_type )rš   r—   r˜   rq   r€   r   rT   r8   rW   r\   r;   rU   rw   r   r   )rd   Ústringr   r   r   rƒ   Ô  s   zFileUniqueId.encodec                 C   r„   )Nc                 S   r…   rc   r   r†   r   r   r   rŠ   â  r‹   z(FileUniqueId.__str__.<locals>.<dictcomp>rŒ   r�   r   r   r   r‘   á  r’   zFileUniqueId.__str__)r2   r3   r4   r—   r�   r•   re   r–   r   rƒ   r‘   r   r   r   r   r™   Ÿ  s(    úþýüû
ú%r™   )$r
   Úloggingrq   Úenumr   Úior   Útypingr   Úpyrogram.raw.corer   r   Ú	getLoggerr2   Úlogr   r�   r   r   r   r!   r"   rH   r6   r7   r8   rB   rA   rx   Úsetrz   ru   rv   rM   r—   r™   r   r   r   r   Ú<module>   s0   

ÿ z
