U
    Mf)                     @   sp   d dl Z ddlmZ ddlmZmZmZmZ G dd deZG dd	 d	eZ	G d
d deZ
G dd deZdS )    N   )InfoExtractor   )ExtractorErrorint_or_nonetraverse_objtry_getc                   @   s   e Zd Zdd ZdddZdS )AmazonMiniTVBaseIEc                 C   s&   | j dd dd | dd jt_d S )Nzhttps://www.amazon.in/minitvzFetching guest session cookiesnotezhttps://www.amazon.inz
session-id)Z_download_webpageZ_get_cookiesvaluer	   
session_id)self r   A/tmp/pip-unpacked-wheel-zk9bgjdq/yt_dlp/extractor/amazonminitv.py_real_initialize   s     z#AmazonMiniTVBaseIE._real_initializeNc              	   C   s   ddd}|r(|d  d| jd| | jd|r6dnd	 ||d
ddd|r\t| nd |rfd nd|d|d}|drtd|d d d  n|s|S |d |d  S )NZATVINen_GB)ZclientIdZdeviceLocale	variablesZVOD)contentTypeZsessionIdTokenz%https://www.amazon.in/minitv/api/web/Zgraphqlprszapplication/json/ZdWeb)zContent-TypeZcurrentpageurlZcurrentplatformZA1WMMUXPCUJL4N)Z
deviceType	contentId)r   headersdataqueryerrorszMiniTV said: r   messager   operationName)updater   Z_download_jsonjsondumpsencodegetr   )r   asinr   r   Zdevicerespr   r   r   	_call_api   s:    
 
zAmazonMiniTVBaseIE._call_api)NN)__name__
__module____qualname__r   r%   r   r   r   r   r	      s   r	   c                   @   s   e Zd ZdZdddddddd	d
ddddddddddddddddddddddg d
dddd d!dd d"dd gZd#Zd$d% Zd&S )'AmazonMiniTVIEza(?:https?://(?:www\.)?amazon\.in/minitv/tp/|amazonminitv:(?:amzn1\.dv\.gti\.)?)(?P<id>[a-f0-9-]+)zrhttps://www.amazon.in/minitv/tp/75fe3a75-b8fe-4499-8100-5c9424344840?referrer=https%3A%2F%2Fwww.amazon.in%2Fminitvz1amzn1.dv.gti.75fe3a75-b8fe-4499-8100-5c9424344840mp4zMay I Kiss You?ZHindizre:^https?://.*\.(?:jpg|png)$z$md5:a549bfc747973e04feb707833474e59di JbZ20220213iN  zcount:2zCouple Goals1amzn1.dv.gti.56521d46-b040-4fd5-872e-3e70476a04b0zSeason 3   z1amzn1.dv.gti.20331016-d9b9-4968-b991-c89fa4927a36r   )idexttitlelanguage	thumbnaildescriptionrelease_timestamprelease_datedurationchaptersseries	series_idseasonseason_number	season_idepisodeepisode_number
episode_id)url	info_dictzrhttps://www.amazon.in/minitv/tp/280d2564-584f-452f-9c98-7baf906e01ab?referrer=https%3A%2F%2Fwww.amazon.in%2Fminitvz1amzn1.dv.gti.280d2564-584f-452f-9c98-7baf906e01abZJahaanzre:^https?://.*\.(?:jpg|png)z$md5:05eb765a77bf703f322f120ec6867339i z2bZ20220317i  )
r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   zDhttps://www.amazon.in/minitv/tp/280d2564-584f-452f-9c98-7baf906e01abTr?   Zonly_matchingz>amazonminitv:amzn1.dv.gti.280d2564-584f-452f-9c98-7baf906e01abz1amazonminitv:280d2564-584f-452f-9c98-7baf906e01abaw  
query content($sessionIdToken: String!, $deviceLocale: String, $contentId: ID!, $contentType: ContentType!, $clientId: String) {
  content(
    applicationContextInput: {deviceLocale: $deviceLocale, sessionIdToken: $sessionIdToken, clientId: $clientId}
    contentId: $contentId
    contentType: $contentType
  ) {
    contentId
    name
    ... on Episode {
      contentId
      vodType
      name
      images
      description {
        synopsis
        contentLengthInSeconds
      }
      publicReleaseDateUTC
      audioTracks
      seasonId
      seriesId
      seriesName
      seasonNumber
      episodeNumber
      timecode {
        endCreditsTime
      }
    }
    ... on MovieContent {
      contentId
      vodType
      name
      description {
        synopsis
        contentLengthInSeconds
      }
      images
      publicReleaseDateUTC
      audioTracks
    }
  }
}c                 C   s  d|  | }| j|dd}g i  }}|d  D ]\}}t|dsHq4|dkr| j|d |dd|d	d
\}}	|| | ||	}q4|dkr| j|d ||d	d\}
}||
 | ||}q4| d|  q4| j|ddd|i| j	dd}t
|dd }|ddk}||d||t|ddd |dp6i  D t|dtt
|dd t|d|rp|dd gng |d!|d"|d#|d$|r|dnd |d%|r|nd d&S )'Namzn1.dv.gti.zDownloading playback infor
   ZplaybackAssetsZmanifestUrlZhlsr*   Zm3u8_nativeF)r.   Zentry_protocolZm3u8_idfatalZdash)Zmpd_idrC   zUnknown asset type: zDownloading title infocontentr   r   r   r   r   r   c                 S   s   | d d d S )NZtimecodeZendCreditsTime  r   xr   r   r   <lambda>       z.AmazonMiniTVIE._real_extract.<locals>.<lambda>ZvodTypeZEPISODEname)ZaudioTracksr   c                 S   s   g | ]\}}||d qS ))r-   r?   r   ).0type_r?   r   r   r   
<listcomp>   s   z0AmazonMiniTVIE._real_extract.<locals>.<listcomp>Zimages)r2   Zsynopsisc                 S   s   | d d S )NZpublicReleaseDateUTCrG   r   rH   r   r   r   rJ      rK   )r2   ZcontentLengthInSecondszEnd Credits)
start_timer/   Z
seriesNameZseriesIdZseasonNumberseasonIdZepisodeNumber)r-   r/   formats	subtitlesr0   Z
thumbnailsr2   r3   r5   r6   r7   r8   r:   r;   r<   r=   r>   )	_match_idr%   itemsr   Z#_extract_m3u8_formats_and_subtitlesextendZ_merge_subtitlesZ"_extract_mpd_formats_and_subtitlesZreport_warning_GRAPHQL_QUERY_CONTENTr   r"   r   )r   r?   r#   r   rR   rS   rN   ZassetZ	m3u8_fmtsZ	m3u8_subsZmpd_fmtsZmpd_subsZ
title_infoZcredits_timeZ
is_episoder   r   r   _real_extract   s|    

    

   

 zAmazonMiniTVIE._real_extractN)r&   r'   r(   
_VALID_URL_TESTSrW   rX   r   r   r   r   r)   +   s^   /,r)   c                   @   sF   e Zd ZdZdZdZddddidd	d
dgZdZdd Zdd Z	dS )AmazonMiniTVSeasonIEzamazonminitv:seasonz;amazonminitv:season:(?:amzn1\.dv\.gti\.)?(?P<id>[a-f0-9-]+)z-Amazon MiniTV Season, "minitv:season:" prefixzEamazonminitv:season:amzn1.dv.gti.0aa996eb-6a1b-4886-a342-387fbd2f1db0   r-   z1amzn1.dv.gti.0aa996eb-6a1b-4886-a342-387fbd2f1db0r?   Zplaylist_mincountr@   z8amazonminitv:season:0aa996eb-6a1b-4886-a342-387fbd2f1db0TrA   a[  
query getEpisodes($sessionIdToken: String!, $clientId: String, $episodeOrSeasonId: ID!, $deviceLocale: String) {
  getEpisodes(
    applicationContextInput: {sessionIdToken: $sessionIdToken, deviceLocale: $deviceLocale, clientId: $clientId}
    episodeOrSeasonId: $episodeOrSeasonId
  ) {
    episodes {
      ... on Episode {
        contentId
        name
        images
        seriesName
        seasonId
        seriesId
        seasonNumber
        episodeNumber
        description {
          synopsis
          contentLengthInSeconds
        }
        publicReleaseDateUTC
      }
    }
  }
}
c                 c   sN   | j |ddd|i| jdd}|d D ]"}| d|d  t|d V  q&d S )	NzDownloading season infoZgetEpisodesZepisodeOrSeasonIdrE   rF   Zepisodeszamazonminitv:r   )r%   _GRAPHQL_QUERY
url_resultr)   )r   r#   season_infor<   r   r   r   _entries   s       zAmazonMiniTVSeasonIE._entriesc                 C   s"   d|  | }| | ||S NrB   rT   Zplaylist_resultra   r   r?   r#   r   r   r   rX      s    z"AmazonMiniTVSeasonIE._real_extractN
r&   r'   r(   ZIE_NAMErY   ZIE_DESCrZ   r^   ra   rX   r   r   r   r   r[      s     r[   c                   @   sF   e Zd ZdZdZdZddddidd	d
dgZdZdd Zdd Z	dS )AmazonMiniTVSeriesIEzamazonminitv:seriesz;amazonminitv:series:(?:amzn1\.dv\.gti\.)?(?P<id>[a-f0-9-]+)z-Amazon MiniTV Series, "minitv:series:" prefixzEamazonminitv:series:amzn1.dv.gti.56521d46-b040-4fd5-872e-3e70476a04b0r,   r-   r+   r]   z8amazonminitv:series:56521d46-b040-4fd5-872e-3e70476a04b0TrA   aa  
query getSeasons($sessionIdToken: String!, $deviceLocale: String, $episodeOrSeasonOrSeriesId: ID!, $clientId: String) {
  getSeasons(
    applicationContextInput: {deviceLocale: $deviceLocale, sessionIdToken: $sessionIdToken, clientId: $clientId}
    episodeOrSeasonOrSeriesId: $episodeOrSeasonOrSeriesId
  ) {
    seasons {
      seasonId
    }
  }
}
c                 c   sN   | j |ddd|i| jdd}|d D ]"}| d|d  t|d V  q&d S )	NzDownloading series infoZ
getSeasonsZepisodeOrSeasonOrSeriesIdrE   rF   Zseasonszamazonminitv:season:rQ   )r%   r^   r_   r[   )r   r#   r`   r9   r   r   r   ra     s     zAmazonMiniTVSeriesIE._entriesc                 C   s"   d|  | }| | ||S rb   rc   rd   r   r   r   rX   $  s    z"AmazonMiniTVSeriesIE._real_extractNre   r   r   r   r   rf      s     rf   )r   commonr   utilsr   r   r   r   r	   r)   r[   rf   r   r   r   r   <module>   s   $ ;