
    N[i2;                        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j                  e      ZdedefdZdedefd	Zdedefd
ZdedefdZ G d de      Z G d de      Zej.                  ej0                  ej2                  ej4                  ej6                  hZ ee      ez
  ZdZdZ  G d d      Z! G d de      Z" G d d      Z#y)    N)IntEnum)BytesIO)List)BytesStringsreturnc                 f    t        j                  |       j                         j                  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   s    C/var/www/files/kim/lib/python3.12/site-packages/pyrogram/file_id.py
b64_encoder      s)     ##A&--/55c::    c                 R    t        j                  | dt        |        dz  z  z         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lenr   s    r   
b64_decoder   ,   s)     ##AAw{(;$;<<r   c                     g }d}| D ]2  }|s|dz  }|r|j                  d|f       d}|j                  |       4 |r|j                  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bs       r   
rle_encoder"   9   sj     AA FA!Q HHQK 		!Q8Or   c                     g }d}| D ]1  }|sd}|r|j                  d|z         d}!|j                  |       3 t        |      S )zZero-value RLE decoder

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

    Returns:
        ``bytes``: The decoded bytes
    FTr   r   )r   r   zr!   s       r   
rle_decoder&   V   sV     AA 	AHHTAXAHHQK	 8Or   c                   X    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y)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_FILE r   r   r(   r(   q   sa    IJEEEHIDGEIIJJFJr   r(   c                   $    e Zd ZdZdZdZdZdZdZy)ThumbnailSourcezKnown thumbnail sourcesr   r   r)   r*   r   N)	r8   r9   r:   r;   LEGACYr<   CHAT_PHOTO_SMALLCHAT_PHOTO_BIGSTICKER_SET_THUMBNAILrN   r   r   rP   rP      s     !FINr   rP   i   i   c            %           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Z
edefd       ZddddedefdZd Zy)FileIdr      r   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_hashrY   rZ   	file_typedc_idr[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   c                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        || _        || _        || _        || _        || _        y N)rY   rZ   ri   rj   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   )selfrY   rZ   ri   rj   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   s                      r   __init__zFileId.__init__   s    * 

"
, &" 0#6 ,  0,'>$r   file_idc                    t        t        |             }|d   }|dk  rd}t        |d d       }n|d   }t        |d d       }t        j                  d|j                  d            \  }}t        |t        z        }t        |t        z        }|t         z  }|t         z  }	 t        |      }|rMt        j
                  |      }	t        j                  d	|j                  d            \  }
t        |||||	|

      S |rt        j
                  |      nd}t        j                  d|j                  d            \  }}
|t        v rt        j                  d	|j                  d            \  }|dk  rdn$t        j                  d|j                  d            \  }	 t        |      }|t        j                   k(  r>t        j                  d|j                  d            \  }}t        |||||||
||||      S |t        j"                  k(  rKt        j                  d|j                  d            \  }}}t%        |      }t        |||||||
|||||      S |t        j&                  t        j(                  fv r@t        j                  d|j                  d            \  }}}t        |||||||
|||||      S |t        j*                  k(  r@t        j                  d|j                  d            \  }}}t        |||||||
|||||      S |t,        v rt        |||||||
      S y # t        $ r t        d| d|        w xY w# t        $ r t        d| d|        w xY w)Nr   r   <iir.   zUnknown file_type z of file_id <q)rY   rZ   ri   rj   r\   r^   r   <qqr6   r$   <izUnknown thumbnail_source <qir2   )rY   rZ   ri   rj   r[   r]   r^   r_   r`   rc   rd   <iii)rY   rZ   ri   rj   r[   r]   r^   r_   r`   ra   rb   rd   <qqi   )rY   rZ   ri   rj   r[   r]   r^   r_   r`   re   rf   rd   )rY   rZ   ri   rj   r[   r]   r^   r_   r`   rg   rh   rd   )rY   rZ   ri   rj   r[   r]   r^   )r&   r   r   structunpackreadboolWEB_LOCATION_FLAGFILE_REFERENCE_FLAGr(   
ValueErrorr   rV   r   PHOTO_TYPESrP   rQ   r<   chrrR   rS   rT   DOCUMENT_TYPES)ro   decodedrY   rZ   bufferri   rj   has_web_locationhas_file_referencer\   r^   r[   r]   r_   r`   rc   rd   ra   rb   re   rf   rg   rh   s                          r   r   zFileId.decode   s   Z01 19EWSb\*FBKEWSb\*F "==A?	5  	,= =>!).A"AB 	'''	)))		T +I ++f%C!==v{{1~>LK#'  0BF+s &eV[[_ E+#tV[[^<JI(-	v}}T6;;WX>7Zf#23C#D   ?#9#99#)==B#H '#1% +'%5!%   ?#<#<<@FfV\VaVabdVe@f=#^X!$^!4'#1% +'%5(;#1%   O$D$DoFdFd#ee6<mmFFKKXZO6\3)8'#1% +'%5#%5%   ?#H#HHDJMMRXZ`ZeZefhZiDjA 7'#1% +'%5#1,C%  &#-!'  'I  	T1)L	RSS	T2  f #<=M<Nl[bZc!deefs   $L( M (MM!)rY   rZ   c          	      d   ||n| j                   }||n| j                  }t               }| j                  }| j                  r	|t
        z  }| j                  r	|t        z  }|j                  t        j                  d|| j                               | j                  r$|j                  t        | j                               | j                  r$|j                  t        | j                               |j                  t        j                  d| j                  | j                               | j                  t         v r|j                  t        j                  d| j"                               |dk\  r/|j                  t        j                  d| j$                               | j$                  t&        j(                  k(  r<|j                  t        j                  d| j*                  | j,                               np| j$                  t&        j.                  k(  rP|j                  t        j                  d| j0                  t3        | j4                        | j,                               n| j$                  t&        j6                  t&        j8                  fv rF|j                  t        j                  d| j:                  | j<                  | j,                               n| j$                  t&        j>                  k(  rt|j                  t        j                  d| j@                  | jB                  | j,                               n.|tD        v r&|j                  t        j                  d||             |j                  t        j                  d	||             tG        tI        |jK                                     S )
Nrs   ru   rt   r   rv   rw   rx   ry   z<bb)&rY   rZ   r   ri   r\   r   r[   r   writer{   packrj   r   r   r]   r^   r   r_   r`   rP   rQ   rc   rd   r<   ra   ordrb   rR   rS   re   rf   rT   rg   rh   r   r   r"   getvalue)rm   rY   rZ   r   ri   s        r   encodezFileId.encodeT  s   *

*

NN	88**I,,IV[[	4::>?88LL)*LLt2234V[[t7G7GHI>>[(LLT4>>:;zV[[t/D/DEF$$(>(>>V[[T]]KL&&/*C*CCV[[,,++,MM	  &&?+K+K_MkMk*llV[[LL))MM	  &&/*O*OOV[[''00MM	  .(LLUE59:V[[u56*V__%6788r   c                     t        | j                  j                         D ci c]  \  }}|	|| c}}      S c c}}w rl   str__dict__itemsrm   kvs      r   __str__zFileId.__str__  4    T]]%8%8%:LTQamAqDLMML   
;
;
)r8   r9   r:   MAJORMINORintr(   r   r   rP   rn   staticmethodr   r   r   rN   r   r   rV   rV      s8   EE  !$,0(,  $"'+'&?&? &? 	&?
 &? &? &? &? &? &? *&? &&? &? &? &?  !&?" #&?$ %&?& "%'&?P J J JX &* :9s :9# :9xNr   rV   c                   (    e Zd ZdZdZdZdZdZdZdZ	y)	FileUniqueTypezKnown file unique typesr   r   r)   r*   r   r+   N)
r8   r9   r:   r;   WEBr>   rA   rK   rB   rC   rN   r   r   r   r     s#    !
CEHFIDr   r   c                   V    e Zd Zddddddededededef
dZed	efd
       Zd Z	d Z
y)FileUniqueIdN)r\   r]   r_   rd   file_unique_typer\   r]   r_   rd   c                J    || _         || _        || _        || _        || _        y rl   )r   r\   r]   r_   rd   )rm   r   r\   r]   r_   rd   s         r   rn   zFileUniqueId.__init__  s(     !1 " r   file_unique_idc                    t        t        t        |                   }t        j                  d|j                  d            \  }	 t        |      }|t        j                  k(  r"t        j
                  |      }t        ||      S |t        j                  k(  r5t        j                  d|j                               \  }}t        |||      S |t        j                  k(  r3t        j                  d|j                               \  }t        ||	      S t        d
| d|        # t        $ r t        d| d|        w xY w)Nrv   r   zUnknown file_unique_type z of file_unique_id )r   r\   rw   )r   r_   rd   rt   )r   r]   z%Unknown decoder for file_unique_type )r   r&   r   r{   r|   r}   r   r   r   r   r   r>   rA   )r   r   r   r\   r_   rd   r]   s          r   r   zFileUniqueId.decode  sB   J~$>?@"MM$A?	p-.>? ~111++f%C!1 
 ~333"(--v{{}"EIx!1#!  ~666dFKKM:IH!1!  @AQ@RRefteuvww;  	p89I8JJ]^l]mnoo	ps   D% %E c                 8   | j                   t        j                  k(  r5t        j                  d| j                   t        | j                              }n| j                   t        j                  k(  r7t        j                  d| j                   | j                  | j                        }na| j                   t        j                  k(  r,t        j                  d| j                   | j                        }nt        d| j                          t        t        |            S )Nz<isz<iqiz<iqz%Unknown encoder for file_unique_type )r   r   r   r{   r   r   r\   r>   r_   rd   rA   r]   r   r   r"   )rm   strings     r   r   zFileUniqueId.encode  s      N$6$66[[(=(=vdhh?OPF""n&:&::[[)>)>PTP]P]^F""n&=&==[[(=(=t}}MF DTEZEZD[\]]*V,--r   c                     t        | j                  j                         D ci c]  \  }}|	|| c}}      S c c}}w rl   r   r   s      r   r   zFileUniqueId.__str__  r   r   )r8   r9   r:   r   r   r   rn   r   r   r   r   rN   r   r   r   r     so     !(! ! 	!
 ! ! #xs #x #xJ.Nr   r   )$r   loggingr{   enumr   ior   typingr   pyrogram.raw.corer   r   	getLoggerr8   logr   r   r   r   r"   r&   r(   rP   r<   r=   r>   rH   rG   r   setr   r   r   rV   r   r   rN   r   r   <module>r      s  &       +g!
;% 
;C 
;
=# 
=% 
=% E :% E 6w ,g  !!8#6#6HZHZ++-X,   vN vNrW CN CNr   