Ë
    Ò«fi¢  ã                  ón   — d dl mZ ddl­ d dlmZmZmZmZ erddlm	Z	 ddl
mZ ddlmZ  G d	„ d
«      Zy)é    )Úannotationsé   )Ú*)ÚTYPE_CHECKINGÚClassVarÚIteratorÚOptional)Ú	TikTokApié   )ÚUser)ÚVideoc                  ó†   — e Zd ZU dZded<   ded<   	 ded<   	 ded	<   	 d
ed<   	 ded<   	 ddd„Zdd„Zddd„Zd„ Zd„ Z	d„ Z
y)ÚSoundz
    A TikTok Sound/Music/Song.

    Example Usage
        .. code-block:: python

            song = api.song(id='7016547803243022337')
    zClassVar[TikTokApi]ÚparentÚstrÚidúOptional[str]ÚtitlezOptional[User]ÚauthorzOptional[int]ÚdurationzOptional[bool]ÚoriginalNc                ó`   — ||| _         | j                  «        y|€t        d«      ‚|| _        y)zK
        You must provide the id of the sound or it will not work.
        NzYou must provide id parameter.)Úas_dictÚ_Sound__extract_from_dataÚ	TypeErrorr   )Úselfr   Údatas      úS/home/homepc/tiktok-worker/venv/lib/python3.12/site-packages/TikTokApi/api/sound.pyÚ__init__zSound.__init__"   s5   € ð ÐØˆDŒLØ×$Ñ$Õ&ØˆZÜÐ<Ó=Ð=àˆDGó    c              ‹  óB  K  — t        | dd«      }|st        d«      ‚|j                  d«      |dœ}| j                  j	                  d||j                  d«      |j                  d«      ¬	«      ƒ d{  –—† }|€t        |d
«      ‚|| _        | j                  «        |S 7 Œ+­w)a˜  
        Returns all information sent by TikTok related to this sound.

        Returns:
            dict: The raw data returned by TikTok.

        Raises:
            InvalidResponseException: If TikTok returns an invalid response, or one we don't understand.

        Example Usage:
            .. code-block:: python

                sound_info = await api.sound(id='7016547803243022337').info()
        r   NúDYou must provide the id when creating this class to use this method.Úms_token)ÚmsTokenÚmusicIdz(https://www.tiktok.com/api/music/detail/ÚheadersÚsession_index©ÚurlÚparamsr&   r'   ú$TikTok returned an invalid response.)Úgetattrr   Úgetr   Úmake_requestÚInvalidResponseExceptionr   r   )r   Úkwargsr   Ú
url_paramsÚresps        r   Úinfoz
Sound.info.   s±   è ø€ ô  T˜4 Ó&ˆÙÜØVóð ð
 —z‘z *Ó-Øñ
ˆ
ð
 —[‘[×-Ñ-Ø:ØØ—J‘J˜yÓ)Ø Ÿ*™* _Ó5ð	 .ó 
÷ 
ˆð ˆ<Ü*¨4Ð1WÓXÐXàˆŒØ× Ñ Ô"Øˆð
ús   ‚A/BÁ1BÁ2,Bc               óÐ  K  — t        | dd«      }|€t        d«      ‚d}||k  r¿|d|dœ}| j                  j                  d||j	                  d«      |j	                  d	«      ¬
«      ƒ d{  –—† }|€t        |d«      ‚|j	                  dg «      D ]&  }| j                  j                  |¬«      ­–— |dz  }Œ( |j	                  dd«      sy|j	                  d«      }||k  rŒ¾yy7 Œy­w)ag  
        Returns Video objects of videos created with this sound.

        Args:
            count (int): The amount of videos you want returned.
            cursor (int): The the offset of videos from 0 you want to get.

        Returns:
            async iterator/generator: Yields TikTokApi.video objects.

        Raises:
            InvalidResponseException: If TikTok returns an invalid response, or one we don't understand.

        Example Usage:
            .. code-block:: python

                async for video in api.sound(id='7016547803243022337').videos():
                    # do something
        r   Nr"   r   é   )ÚmusicIDÚcountÚcursorz+https://www.tiktok.com/api/music/item_list/r&   r'   r(   r+   ÚitemList©r   r   ÚhasMoreFr8   )r,   r   r   r.   r-   r/   Úvideo)	r   r7   r8   r0   r   Úfoundr*   r2   r<   s	            r   ÚvideoszSound.videosW   s  è ø€ ô( T˜4 Ó&ˆØˆ:ÜØVóð ð ˆØeŠmàØØ ñˆFð Ÿ™×1Ñ1ØAØØŸ
™
 9Ó-Ø$Ÿj™j¨Ó9ð	 2ó ÷ ˆDð ˆ|Ü.ØÐ@óð ð Ÿ™ *¨bÓ1ò Ø—k‘k×'Ñ'¨UÐ'Ó3Ó3Ø˜‘
‘ðð —8‘8˜I uÔ-Øà—X‘X˜hÓ'ˆFð5 emðús   ‚A(C&Á*C$Á+A6C&Ã"C&c                ól  — | j                   }|j                  «       }d|v rÜ|j                  d«      j                  d«      }t        |t        «      r"| j
                  j                  |¬«      | _        n1t        |t        «      r!| j
                  j                  |¬«      | _        |j                  d«      j                  d«      r8|j                  d«      j                  d«      j                  d«      | _	        |j                  d«      j                  d«      j                  d«      | _
        |j                  d«      j                  d«      j                  d«      | _        |j                  d«      j                  d«      j                  d	«      | _        |j                  d«      j                  d«      j                  d
«      | _        |j                  d«      j                  d«      j                  d«      | _        d|v rÞ|j                  d«      j                  d«      | _	        |j                  d«      j                  d«      | _
        |j                  d«      j                  d«      | _        |j                  d«      j                  d	«      | _        |j                  d«      j                  d
«      | _        |j                  d«      j                  d«      | _        d|v r|j                  d«      | _        t!        | dd «      €.t"        j
                  j$                  j'                  d|› d«       y y )NÚ	musicInfor   r:   )ÚusernameÚmusicr   r   r   ÚplayUrlÚ
coverLarger   Ústatsz"Failed to create Sound with data: ú
)r   Úkeysr-   Ú
isinstanceÚdictr   Úuserr   r   r   r   r   Úplay_urlÚcover_larger   rE   r,   r   ÚloggerÚerror)r   r   rG   r   s       r   Ú__extract_from_datazSound.__extract_from_dataŽ   sq  € Ø|‰|ˆØy‰y‹{ˆà˜$ÒØ—X‘X˜kÓ*×.Ñ.¨xÓ8ˆFÜ˜&¤$Ô'Ø"Ÿk™k×.Ñ.°FÐ.Ó;•Ü˜F¤CÔ(Ø"Ÿk™k×.Ñ.¸Ð.Ó?”àx‰x˜Ó$×(Ñ(¨Õ1Ø!ŸX™X kÓ2×6Ñ6°wÓ?×CÑCÀGÓL”
ØŸ(™( ;Ó/×3Ñ3°GÓ<×@Ñ@ÀÓF”Ø $§¡¨Ó 5× 9Ñ 9¸'Ó B× FÑ FÀzÓ R”Ø $§¡¨Ó 5× 9Ñ 9¸'Ó B× FÑ FÀyÓ Q”Ø#'§8¡8¨KÓ#8×#<Ñ#<¸WÓ#E×#IÑ#IÈ,Ó#WÔ Ø $§¡¨Ó 5× 9Ñ 9¸'Ó B× FÑ FÀzÓ R”àd‰?ØŸ™ 'Ó*×.Ñ.¨wÓ7ˆDŒJØ—h‘h˜wÓ'×+Ñ+¨DÓ1ˆDŒGØ ŸH™H WÓ-×1Ñ1°*Ó=ˆDŒMØ ŸH™H WÓ-×1Ñ1°)Ó<ˆDŒMØ#Ÿx™x¨Ó0×4Ñ4°\ÓBˆDÔØ ŸH™H WÓ-×1Ñ1°*Ó=ˆDŒMàd‰?ØŸ™ 'Ó*ˆDŒJä4˜˜tÓ$Ð,ÜL‰L×Ñ×%Ñ%Ð(JÈ4È&ÐPRÐ&SÕTð -r    c                ó"   — | j                  «       S )N)Ú__str__©r   s    r   Ú__repr__zSound.__repr__¯   s   € Ø|‰|‹~Ðr    c                ó$   — dt        | dd «      › dS )NzTikTokApi.sound(id='r   z'))r,   rR   s    r   rQ   zSound.__str__²   s   € Ø%¤g¨d°D¸$Ó&?Ð%@ÀÐCÐCr    )NN)r   r   r   r   )ÚreturnrI   )r5   r   )rU   zAsyncIterator[Video])Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r3   r>   r   rS   rQ   © r    r   r   r      s^   … ñð  ÓàƒGØ#ØÓØ ØÓØ/ØÓØ.ØÓØ.ô
ó'ôR5(ònUòBóDr    r   N)Ú
__future__r   Ú
exceptionsÚtypingr   r   r   r	   Útiktokr
   rJ   r   r<   r   r   r[   r    r   ú<module>r`      s+   ðÝ "Ü ß >Ó >áÝ"ÝÝ÷hDò hDr    