o
    i                     @   s@   d dl Z d dlZd dlZd dlZddlmZ G dd deZdS )    N   )FFmpegPostProcessorc                
   @   sj   e Zd ZddiZddiZi eddiZddd	d
dddddd	eZdddZdd Zdd Z	dd Z
dS )SponsorBlockPPYoutubeYouTubepoi_highlight	HighlightchapterChapterSponsorzIntermission/Intro AnimationzEndcards/CreditszUnpaid/Self PromotionzPreview/RecapzFiller TangentzInteraction ReminderzNon-Music SectionzHook/Greetings)	sponsorintrooutro	selfpromopreviewfillerinteractionmusic_offtopichookNhttps://sponsor.ajay.appc                 C   sD   t | | t|p| j | _td|r|| _d S d| | _d S )Nz	https?://zhttps://)	r   __init__tuple
CATEGORIESkeys_categoriesrematch_API_URL)self
downloader
categoriesapi r"   U/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/postprocessor/sponsorblock.pyr   "   s   $zSponsorBlockPP.__init__c                 C   sR   |d }|| j vr| d|  g |fS | d | ||d|d< g |fS )Nextractor_keyz"SponsorBlock is not supported for zFetching SponsorBlock segmentsdurationsponsorblock_chapters)
EXTRACTORS	to_screen_get_sponsor_chaptersget)r   info	extractorr"   r"   r#   run'   s   

zSponsorBlockPP.runc                    s    |d j|d  } fddfdd|D }t|t|kr*d fdd	fd
d|D }|sBd |S dt| d |S )Nidr$   c                    s   | d }|dkr
dS |d dkrd|d< | d j v r#|d  d7  <  r1 |d  dkr1 |d< | d r=t | d  nd}|dk pR|dk oR||d |d   d	k S )
Nsegment)r   r   Fr   r   categoryvideoDuration   g?)POI_CATEGORIESabs)s	start_enddiff)r%   r   r"   r#   duration_filter4   s   (z=SponsorBlockPP._get_sponsor_chapters.<locals>.duration_filterc                    s   g | ]} |r|qS r"   r"   .0r5   )r8   r"   r#   
<listcomp>G   s    z8SponsorBlockPP._get_sponsor_chapters.<locals>.<listcomp>zjSome SponsorBlock segments are from a video of different duration, maybe from an old version of this videoc              	      sP   | d | d \}}}|dkr| d n j | }||||| d ||||fgdS )Nr/   r0   r	   description
actionType)
start_timeend_timer0   titletyper   )r   )r5   startendcatr@   )r   r"   r#   
to_chapterK   s   z8SponsorBlockPP._get_sponsor_chapters.<locals>.to_chapterc                    s   g | ]} |qS r"   r"   r9   )rE   r"   r#   r;   W   s    z<No matching segments were found in the SponsorBlock databasezFound z& segments in the SponsorBlock database)_get_sponsor_segmentsr'   lenreport_warningr(   )r   r+   r%   segmentsduration_matchsponsor_chaptersr"   )r%   r8   r   rE   r#   r)   1   s   

z$SponsorBlockPP._get_sponsor_chaptersc              	   C   s   t |d }| j d|d d  dtj|t	| j
t	g dd }| |p0g D ]}|d |kr?|d   S q1g S )	Nasciiz/api/skipSegments/   ?)skippoir	   )servicer    actionTypesvideoIDrI   )hashlibsha256encode	hexdigestr   urllibparse	urlencodejsondumpsr   _download_json)r   video_idrQ   
video_hashurldr"   r"   r#   rF   ^   s   

z$SponsorBlockPP._get_sponsor_segments)Nr   )__name__
__module____qualname__r'   r3   NON_SKIPPABLE_CATEGORIESr   r   r-   r)   rF   r"   r"   r"   r#   r   	   s4    


-r   )rT   r[   r   urllib.parserX   ffmpegr   r   r"   r"   r"   r#   <module>   s    