U
    g                     @   sp   d dl Z 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	m
Z
mZmZ ddlmZ G dd	 d	eZdS )
    N   )
FragmentFD   )imghdr)
escapeHTMLformatSecondssrt_subtitles_timecodeurljoin)__version__c                   @   sP   e Zd ZdZeddeZeddeZedd Zdd	 Zd
d Z	dd Z
dS )MhtmlFDa  html, body {
    margin: 0;
    padding: 0;
    height: 100vh;
}

html {
    overflow-y: scroll;
    scroll-snap-type: y mandatory;
}

body {
    scroll-snap-type: y mandatory;
    display: flex;
    flex-flow: column;
}

body > figure {
    max-width: 100vw;
    max-height: 100vh;
    scroll-snap-align: center;
}

body > figure > figcaption {
    text-align: center;
    height: 2.5em;
}

body > figure > img {
    display: block;
    margin: auto;
    max-width: 100%;
    max-height: calc(100vh - 5em);
}
z\s+ z5\B \B|(?<=[\w\-]) (?=[^\w\-])|(?<=[^\w\-]) (?=[\w\-]) c                 C   s0   dd dd tj|  ddD d d S )	Nz
=?utf-8?Q?    c                 s   s(   | ] }|d krt |fnd| V  qdS )    s   =%02XN)bytes).0b r   ;/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/downloader/mhtml.py	<genexpr>6   s   z'MhtmlFD._escape_mime.<locals>.<genexpr>T)headerus-asciiz?=)joinquopriencodestringencodedecode)sr   r   r   _escape_mime4   s    zMhtmlFD._escape_mimec                 C   s   | d| dS )N.z@yt-dlp.github.io.invalidr   )selfifragmentfrag_boundaryr   r   r   _gen_cid;   s    zMhtmlFD._gen_cidc          	      C   s   t  }|dtt dt| d| j d d}t|D ]\}}|d z@||d  }|dj|d	 t|t|t	|d d
dd W n4 t
ttfk
r   d }|d|d	  d Y nX |d| ||| d |d |}q<| S )NzB<!DOCTYPE html><html><head><meta name="generator" content="yt-dlp z	"><title>z</title><style>z</style><body>r   z<figure>durationuK   <figcaption>Slide #{num}: {t0} – {t1} (duration: {duration})</figcaption>r   T)Zmsec)numt0t1r%   z<figcaption>Slide #z</figcaption>z<img src="cid:z">z	</figure>)ioStringIOwriter   YT_DLP_VERSION_STYLESHEET	enumerateformatr   r   KeyError
ValueError	TypeErrorr$   getvalue)	r    	fragmentsr#   titleoutputr'   r!   fragr(   r   r   r   	_gen_stub>   s0     	

zMhtmlFD._gen_stubc                 C   sD  | d}| j ddr(|d d d n|d }| d|d }| d|d	 }|t|d
}| || |ddtt ddd}|d }	|d s| j	||	|d}
|d 
d| | d|	 d| d|	 dt|
 d|
 d  d|d< t|D ]\}}|d |d krq| d	}|sD|s6tt||d }| |||}|sZq| |}t }|
d|	d  |
d| |||	d  |
d d!tj|d"pd#    |
d$t|  |
d%|d  |
d&|d'   |
d( | || | d(  q|d 
d)|	d  | ||S )*Nfragment_base_urltestFr4   r   r5   Z	format_idZwebpage_urlurl)filenameZtotal_fragsextra_state-r   )header_writtenmime_boundaryr@   r?   )r4   r#   r5   Zdest_streamznMIME-Version: 1.0
From: <nowhere@yt-dlp.github.io.invalid>
To: <nowhere@yt-dlp.github.io.invalid>
Subject: z-
Content-type: multipart/related; boundary="z&"; type="text/html"
X.yt-dlp.Origin: z

--z:
Content-Type: text/html; charset=utf-8
Content-Length: z

z
TZfragment_indexpaths   --%b
r   s   Content-ID: <%b>
s   Content-type: %b
zimage/)hZjpegs   Content-length: %u
s   Content-location: %b
s   X.yt-dlp.Duration: %f
r%   s   
s
   --%b--

)getparamslenZ _prepare_and_start_frag_download
setdefaultstruuidZuuid4replacer8   r+   r   r   r.   AssertionErrorr	   Z_download_fragmentZ_read_fragmentr)   BytesIOr$   r   whatZ_append_fragmentr3   Z_finish_frag_download)r    r<   Z	info_dictr9   r4   r5   originctxr=   r#   Zstubr!   r"   Zfragment_urlsuccessZfrag_contentZfrag_headerr   r   r   real_download`   s    
 2





 zMhtmlFD.real_downloadN)__name__
__module____qualname__r-   resubstaticmethodr   r$   r8   rP   r   r   r   r   r      s   $
"r   )r)   r   rT   rH   r"   r   compatr   utilsr   r   r   r	   versionr
   r,   r   r   r   r   r   <module>   s   