o
    i)                     @   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)_download_webpage_get_cookiesvaluer	   
session_id)self r   Q/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/amazonminitv.py_real_initialize   s
   z#AmazonMiniTVBaseIE._real_initializeNc              	   C   s   ddd}|r|d  d| jd| | jd|rdnd	 ||d
ddd|r.t| nd |r3d nd|d|d}|drNtd|d d d  |sR|S |d |d  S )NATVINen_GB)clientIddeviceLocale	variablesVOD)contentTypesessionIdTokenz%https://www.amazon.in/minitv/api/web/graphqlprszapplication/json/dWeb)zContent-TypecurrentpageurlcurrentplatformA1WMMUXPCUJL4N)
deviceType	contentId)r   headersdataqueryerrorszMiniTV said: r   messager&   operationName)updater   _download_jsonjsondumpsencodegetr   )r   asinr&   r   devicerespr   r   r   	_call_api   s8   

zAmazonMiniTVBaseIE._call_api)NN)__name__
__module____qualname__r   r4   r   r   r   r   r	      s    r	   c                   @   s   e Zd ZdZdi 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!dd"d#d$did%d&d'dd(d
d)d*d+d,d-g d.
d%d/d0d1d2d0d1d3d0d1gZd4Zd5d6 Zd7S )8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%2Fminitvidz1amzn1.dv.gti.75fe3a75-b8fe-4499-8100-5c9424344840extmp4titlezMay I Kiss You?languageHindi	thumbnailzre:^https?://.*\.(?:jpg|png)$descriptionz$md5:a549bfc747973e04feb707833474e59drelease_timestampi Jbrelease_date20220213durationiN  chapterszcount:2serieszCouple Goals	series_id1amzn1.dv.gti.56521d46-b040-4fd5-872e-3e70476a04b0seasonzSeason 3season_number   	season_idz1amzn1.dv.gti.20331016-d9b9-4968-b991-c89fa4927a36episodeepisode_numberr   
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-7baf906e01abJahaanzre:^https?://.*\.(?:jpg|png)z$md5:05eb765a77bf703f322f120ec6867339i z2b20220317i  )
r9   r:   r<   r=   r?   r@   rA   rB   rD   rE   zDhttps://www.amazon.in/minitv/tp/280d2564-584f-452f-9c98-7baf906e01abTrP   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 ]N\}}t|ds$q|dkrC| j|d |dd|d	d
\}}	|| | ||	}q|dkr`| j|d ||d	d\}
}||
 | ||}q| d|  q| j|ddd|i| j	dd}t
|dd }|ddk}i d|d|dd|d|dt|dddd  |d!pi  D d"t|d#d$tt
|d%d d&t|d'd(|r|d)d*gng d+|d,d-|d.d/|d0d1|d2d3|r|dnd d4|d5d6|r|S d S )7Namzn1.dv.gti.zDownloading playback infor
   playbackAssetsmanifestUrlhlsr;   m3u8_nativeF)r:   entry_protocolm3u8_idfataldash)mpd_idr]   zUnknown asset type: zDownloading title infocontentr$   r*   r   r'   r   r&   c                 S   s   | d d d S )NtimecodeendCreditsTime  r   xr   r   r   <lambda>   s    z.AmazonMiniTVIE._real_extract.<locals>.<lambda>vodTypeEPISODEr9   r<   nameformats	subtitlesr=   )audioTracksr   
thumbnailsc                 S   s   g | ]	\}}||d qS ))r9   rP   r   ).0type_rP   r   r   r   
<listcomp>   s
    
z0AmazonMiniTVIE._real_extract.<locals>.<listcomp>imagesr@   )r@   synopsisrA   c                 S   s   | d d S )NpublicReleaseDateUTCre   r   rf   r   r   r   rh      s    rD   )r@   contentLengthInSecondsrE   zEnd Credits)
start_timer<   rF   
seriesNamerG   seriesIdrJ   seasonNumberrL   seasonIdrM   rN   episodeNumberrO   )	_match_idr4   itemsr   #_extract_m3u8_formats_and_subtitlesextend_merge_subtitles"_extract_mpd_formats_and_subtitlesreport_warning_GRAPHQL_QUERY_CONTENTr   r0   r   )r   rP   r1   r   rl   rm   rq   asset	m3u8_fmts	m3u8_subsmpd_fmtsmpd_subs
title_infocredits_time
is_episoder   r   r   _real_extract   s   















zAmazonMiniTVIE._real_extractN)r5   r6   r7   
_VALID_URL_TESTSr   r   r   r   r   r   r8   +   s    	
/,r8   c                   @   F   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   r9   z1amzn1.dv.gti.0aa996eb-6a1b-4886-a342-387fbd2f1db0rP   playlist_mincountrQ   z8amazonminitv:season:0aa996eb-6a1b-4886-a342-387fbd2f1db0TrT   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   P    | j |ddd|i| jdd}|d D ]}| d|d  t|d V  qd S )	NzDownloading season infogetEpisodesepisodeOrSeasonIdra   rb   episodeszamazonminitv:r$   )r4   _GRAPHQL_QUERY
url_resultr8   )r   r1   season_inforM   r   r   r   _entries   s   zAmazonMiniTVSeasonIE._entriesc                 C   "   d|  | }| | ||S NrV   r}   playlist_resultr   r   rP   r1   r   r   r   r         z"AmazonMiniTVSeasonIE._real_extractN
r5   r6   r7   IE_NAMEr   IE_DESCr   r   r   r   r   r   r   r   r      s     r   c                   @   r   )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-3e70476a04b0rK   r9   rH   r   z8amazonminitv:series:56521d46-b040-4fd5-872e-3e70476a04b0TrT   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   r   )	NzDownloading series info
getSeasonsepisodeOrSeasonOrSeriesIdra   rb   seasonszamazonminitv:season:r{   )r4   r   r   r   )r   r1   r   rI   r   r   r   r     s    zAmazonMiniTVSeriesIE._entriesc                 C   r   r   r   r   r   r   r   r   $  r   z"AmazonMiniTVSeriesIE._real_extractNr   r   r   r   r   r      s     r   )r-   commonr   utilsr   r   r   r   r	   r8   r   r   r   r   r   r   <module>   s    $ ;