
    VGhz                     j    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	m
Z
mZmZ ddlmZ  G d d	e      Zy)
    N   )InfoExtractor   )	HTTPError)ExtractorError
clean_htmlint_or_nonejoin_nonemptyparse_iso8601str_or_noneurl_or_none)traverse_objc                       e Zd ZdZdZdddg dddgd	d
dddd	dddi 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'g d(d)d*d+d,d-d.d/d.d0d1d2d3d4d5d6d7gZi Zd8 Zd9 Zd: Z	d; Z
y<)=GameDevTVDashboardIEz\https?://(?:www\.)?gamedev\.tv/dashboard/courses/(?P<course_id>\d+)(?:/(?P<lecture_id>\d+))?	gamedevtvz+https://www.gamedev.tv/dashboard/courses/2525z<Complete Blender Creator 3: Learn 3D Modelling for Beginners)blendercourseallzbox modelling	sculptingBlenderz3D Artz8https://gamedev-files.b-cdn.net/courses/qisc9pmu1jdc.jpg20220516ib20241027izvg)	idtitletags
categories	thumbnailupload_date	timestampmodified_datemodified_timestampd   )url	info_dictplaylist_countz0https://www.gamedev.tv/dashboard/courses/63/2279r   z$df04f4d8-68a4-4756-a71b-9ca9446c3a01extmp4r"   imer   20230504episodez)MagicaVoxel Community Course Introduction	series_id63r   r    iSdr!   20231204r   MagicaVoxelseasonzMagicaVoxel Community Courser   )r.   r   r   serieszMagicaVoxel 3D Art Mini Coursedurationi}  episode_numberr   season_number	season_id219z$md5:a378738c5bbec1c785d76c067652d650z63-219-2279z61_CC_MVX MagicaVoxel Community Course Introduction.mp4zThttps://vz-23691c65-6fa.b-cdn.net/df04f4d8-68a4-4756-a71b-9ca9446c3a01/thumbnail.jpg)description
display_id	alt_titler   )r$   r%   c                 X   	 | j                  dd dddit        j                  ||g d      j                               }|d    d|d    | j                  d<   y # t        $ rF}t        |j                  t              r&|j                  j                  dk(  rt	        dd	
       d }~ww xY w)Nz)https://api.gamedev.tv/api/students/loginz
Logging inzContent-Typezapplication/json)emailpassword
cart_items)headersdatai  zInvalid username/passwordT)expected
token_type access_tokenAuthorization)
_download_jsonjsondumpsencoder   
isinstancecauser   status_API_HEADERS)selfusernamer;   responsees        c/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/gamedevtv.py_perform_loginz#GameDevTVDashboardIE._perform_login>   s    	**;T<');<ZZ% ("$!  68 + H 190F/GqR`IaHb-c/*  	!''9-!''..C2G$%@4PP	s   =A 	B)#AB$$B)c                 b    | j                   j                  d      s| j                  dd       y y )NrC   z,This content is only available with purchaser;   )method)rK   getraise_login_required)rL   s    rP   _real_initializez%GameDevTVDashboardIE._real_initializeO   s4      $$_5%%>z & S 6    c              #     K   t        |ddt        hf      D ](  }t        |dt        hfdt        hfdt        hfd      }t        |dd f      D ]  }|rt        |j                  d            |k7  r#t        ||j                  d	      |j                  d            }| j                  |d
   d   |dd      \  }	}
i |||||	|
|j                  d      |dt        |d
dt        hfdt        hfd
dt        hfdt        hfdt        hfdt        hfd
dt        hfd
dt        hfd
dt        hfd
dt        hfd
        + y w)Nsections.r   r   order)r4   r/   r3   lecturesc                 $    t        |d   d         S )NvideoplayListUrl)r   )_vs     rP   <lambda>z/GameDevTVDashboardIE._entries.<locals>.<lambda>[   s    ;WXY`WaboWpKq rW   r4   r]   r^   r(   hls)m3u8_id)r   r7   formats	subtitlesr0   r+   guidr6   duration_in_sec
created_at
updated_atthumbnailUrl)
r   r   r8   r6   r*   r2   r1   r    r"   r   )r   dictr   strr	   rT   r
   #_extract_m3u8_formats_and_subtitlesr   r   r   )rL   r>   	course_idcourse_infoselected_lecturesectionsection_infolecturer7   rd   re   s              rP   _entrieszGameDevTVDashboardIE._entriesT   s    #D:sTF*CD !	G'"[M2"SE*")K=!92 L
 (*>q1rs #GKK,=(>BR(R*9l6F6F{6SU\U`U`aeUfg
%)%M%MG$]3ZPU &N &W"!" %",&!*)oog6!* #7&6")C5!1&-w%>(5
|'D$+cU#3+2[M*B%,.?+$O&-|m_%M/6}o.V&-~}%M-  !	s   EEc           
         | j                  |      j                  dd      \  }}| j                  d| || j                        d   }t	        |dt
        hfddd	t
        hfd
ddt
        hfdt        hfdt        hfdt        hfd      }| j                  ||||      }|rt        |d       }|st        d      |S  | j                  ||fi |S )Nrn   
lecture_idz&https://api.gamedev.tv/api/courses/my/)r=   r>   r   r   .namer   rh   ri   image)r   r   r   r    r"   r   zLecture not found)_match_valid_urlgrouprD   rK   r   rl   r   r   rt   nextr   playlist_result)rL   r$   rn   rv   r>   ro   entriesrs   s           rP   _real_extractz"GameDevTVDashboardIE._real_extractx   s     $ 5 5c : @ @l [	:""4YK@)%% # ''-/ #4u%S&3%0'gu=&8#/-"A!K=1*
  --ijI7D)G$%899N#t##GYF+FFrW   N)__name__
__module____qualname__
_VALID_URL_NETRC_MACHINE_TESTSrK   rQ   rV   rt   r~    rW   rP   r   r      s\   pJ N<SN$h/S%#'",

  B
8
5
 !*
 :	

 B
 
 @
 
 Z
 8]3
 4
 4
 6
 
 a
  Q!
" #
$ B'Qo+
'FP Ld"S
"HGrW   r   )rE   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r   utils.traversalr   r   r   rW   rP   <module>r      s2     ! -   +|G= |GrW   