
    V|h{=                         S SK r S SKrSSKJr  SSKJr  SSKJrJ	r	J
r
JrJrJrJrJrJrJrJr   " S S\5      r " S	 S
\5      rg)    N   )InfoExtractor)	YoutubeIE   )ExtractorErrorbug_reports_messagedetermine_extextract_attributesget_element_by_classget_element_html_by_idint_or_nonelowercase_escapeparse_qstry_getupdate_url_queryc            	       l   \ rS rSrSrSSSSSSS	S
.S.SSSSSSSS
.S.SSS.SSS.SSS.SSS.SSS./r0 \R                  R                  5        V VVs0 s H"  u  pUR                  S5      (       d  M  XS   _M$     snnn ESS0Er
SrSSS .r/ rS!r\S" 5       rS# r S)S$ jrS% rS& rS' rS(rg!s  snnn f )*GoogleDriveIE   a  (?x)
                        https?://
                            (?:
                                (?:docs|drive|drive\.usercontent)\.google\.com/
                                (?:
                                    (?:uc|open|download)\?.*?id=|
                                    file/d/
                                )|
                                video\.google\.com/get_player\?.*?docid=
                            )
                            (?P<id>[a-zA-Z0-9_-]{28,})
                    zGhttps://drive.google.com/file/d/0ByeS4oOUV-49Zzh4R1J6R09zazQ/edit?pli=1 5c602afbbf2c1db91831f5d82f678554z0ByeS4oOUV-49Zzh4R1J6R09zazQmp4zBig Buck Bunny.mp4-   zBhttps://drive.google.com/thumbnail?id=0ByeS4oOUV-49Zzh4R1J6R09zazQ)idexttitleduration	thumbnail)urlmd5	info_dictz@https://drive.google.com/uc?id=1IP0o8dHcQrIHGgVyp0Ofvx2cGfLzyO1x 322db8d63dd19788c04050a4bba67073!1IP0o8dHcQrIHGgVyp0Ofvx2cGfLzyO1xmp3z7My Buddy - Henry Burr - Gus Kahn - Walter Donaldson.mp3   zGhttps://drive.google.com/thumbnail?id=1IP0o8dHcQrIHGgVyp0Ofvx2cGfLzyO1xzAhttps://drive.google.com/file/d/0B-vUyvmDLdWDcEt4WjBqcmI2XzQ/viewT)r   only_matchingzHhttps://drive.google.com/file/d/1ENcQ_jeCuj7y19s66_Ou9dRP4GKGsodiDQ/editz=https://drive.google.com/open?id=0B2fjwgkl1A_CX083Tkowdmt6d28z;https://drive.google.com/uc?id=0B2fjwgkl1A_CX083Tkowdmt6d28zMhttps://drive.usercontent.google.com/download?id=0ByeS4oOUV-49Zzh4R1J6R09zazQr   50m4az"https://drive.google.com/timedtexttracktarget)	subtitlesautomatic_captionsNc              #      #    [         R                  " SU5      nU(       a#  SR                  UR                  S5      5      v   g g 7f)Nz<iframe[^>]+src="https?://(?:video\.google\.com/get_player\?.*?docid=|(?:docs|drive)\.google\.com/file/d/)(?P<id>[a-zA-Z0-9_-]{28,})z"https://drive.google.com/file/d/{}r   )researchformatgroup)clsr   webpagemobjs       V/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/googledrive.py_extract_embed_urls!GoogleDriveIE._extract_embed_urlsV   s@     yy T 6==djj>NOO s   AAc                    U R                   (       a  g U R                  U R                  UUUUUSSSSS.SSSS9U l         U R                   (       a  U R                   R                  S5       Ho  nUR                  R                  S	5      (       d  M%  UR                  R                  S
5      (       a  MG  U R                  R                  UR                  S	   5        Mq     g g )Nlist1)r   vidhlvtypetlangsfmtsvssidszDownloading subtitles XMLz Unable to download subtitles XMLF)querynoteerrnotefatalr.   fmt_codedefault)_captions_xml_download_xml_BASE_URL_CAPTIONSfindallattribget_caption_formats_extappend)selfvideo_idsubtitles_idr:   fs        r3   _download_subtitles_xml%GoogleDriveIE._download_subtitles_xml^   s    !//##X#	6 06e 0 E ''//988<<
++AHHLL4K4K--44QXXj5IJ :     c           
      ,   U(       a  U(       d  g 0 nU R                   R                  U R                  U   5       H  nUR                  R	                  S5      nUR                  R	                  S5      =(       d    Un	U(       a  U	(       d   U R                  SUR                   35        Mp  / n
U R                   HP  nUUUUc  UOUSU	SS.nUb  UR                  SU05        U
R                  [        U R                  U5      US.5        MR     XU'   M     U$ )	N	lang_codenamezOMissing necessary caption metadata. Need lang_code and name attributes. Found: r'    )r9   r;   fmtlangr<   rW   kindtlang)r   r   )rF   rI   _CAPTIONS_ENTRY_TAGrJ   rK   report_warningrL   updaterM   r   rH   )rN   rO   rP   caption_typeorigin_lang_codeorigin_lang_namecaptionscaption_entrycaption_lang_codecaption_namecaption_format_datacaption_formatr@   s                r3   _get_captions_by_type#GoogleDriveIE._get_captions_by_typer   s(   <!//77((68M - 4 4 8 8 E(//33F;O?OL$L## '..;.B.B-C%E F "$"&";";'!)2B2J."2#(	 $/LL'+<!=>#**+D,C,CUK),  #<" +>&'788 rT   c                     U(       a  U(       d  g U R                  XU5        U R                  (       d  g U R                  XS5      $ )Nr)   )rR   rF   ri   )rN   rO   rP   r:   s       r3   _get_subtitlesGoogleDriveIE._get_subtitles   s9    2$$XR@!!))(+NNrT   c                 x   U(       a  U(       d  g U R                  XU5        U R                  (       d  g [        S U R                  R                  S5       5       S 5      nUc  g UR                  R                  S5      nUR                  R                  S5      nU(       a  U(       d  g U R                  XSXV5      $ )Nc              3   f   #    U  H'  oR                   R                  S 5      S:X  d  M#  Uv   M)     g7f)cantrantrueN)rJ   rK   ).0ts     r3   	<genexpr>8GoogleDriveIE._get_automatic_captions.<locals>.<genexpr>   s(     j!DAU^H_ciHiaa!Ds   "1	1r'   rV   rW   r*   )rR   rF   nextrI   rJ   rK   ri   )rN   rO   rP   r:   r'   ra   rb   s          r3   _get_automatic_captions%GoogleDriveIE._get_automatic_captions   s    2$$XR@!!j!3!3!;!;G!Djlpq= <<++K8 <<++F3'7))$8:J^ 	^rT   c                 z  ^ ^^^^ T R                  U5      m[        R                  R                  T R	                  STSST0S95      mU4S jnU" S5      nU" S5      m/ mU" S5      =(       d    S	R                  S
5      nU" S5      =(       d    S	R                  S
5      nU(       Ga<  U(       Ga4  0 nU Hh  n[        R                  " SU5      nU(       d  M#  [        UR                  S5      5      [        UR                  S5      5      4XhR                  S5      '   Mj     U H  n	U	R                  S5      n
[        U
5      S:  a  M%  U
S S u  pT R                  R                  U5      nU(       d  T R                  SU [        5        35        [        U5      UUS.nUR                  U5      nU(       a  UR!                  US   US   S.5        TR#                  U5        M     [%        STSSS.5      nS8U U4S jjnU" US5      nU(       a  UU U4S jnUR&                  R                  S5      (       a	  U" U5        OT R)                  UUTSS S!S"9nU(       a  [+        [-        S#U5      =(       d    S	5      R                  S$5      nU(       a8  U" US%S&S'9nU(       a(  UR&                  R                  S5      (       a  U" U5        O7T R                  [/        S(U5      =(       d    [/        S)U5      =(       d    S*5        T(       d)  U(       a"  T(       a  T R1                  US+S,9  O
[3        US+S,9eU" S-5      nS nU" S.5      nU(       a  [        U5      R                  S/S /5      S0   nT R4                  R7                  S1S2S3S49  TTS5T-   [9        U" S65      5      TT R;                  TUU5      T R=                  TUU5      S7.$ )9Nz'https://drive.google.com/get_video_infozDownloading video webpagedocid)r@   c                 &   >^  [        TU 4S j5      $ )Nc                    > U T   S   $ )Nr    )xkeys    r3   <lambda>@GoogleDriveIE._real_extract.<locals>.get_value.<locals>.<lambda>   s    3rT   )r   )r   
video_infos   `r3   	get_value.GoogleDriveIE._real_extract.<locals>.get_value   s    :':;;rT   reasonr   fmt_stream_maprX   ,fmt_listz5^(?P<format_id>\d+)/(?P<width>\d+)[xX](?P<height>\d+)widthheight	format_id|r   zUnknown format )r   r   r   r   r   )r   r   z-https://drive.usercontent.google.com/downloaddownloadrs   )r   exportconfirmc           	      <   > TR                  U TSU S3SU S3SUS9$ )NzRequesting z filezUnable to request F)rA   rB   rC   data)_request_webpage)
source_urlr[   r   rN   rO   s      r3   request_source_file8GoogleDriveIE._real_extract.<locals>.request_source_file   s=    ((H[e+D,TF%8D ) R RrT   sourcec                    > T(       d+  TR                  SU R                  R                  S5      SS S9mTR                  U R                  [        TS5      R                  5       SSS.5        g )	Nz\bfilename="([^"]+)"Content-Dispositionr   )rE   r   r   r   )r   r   r   quality)_search_regexheadersrK   rM   r   r	   lower)urlhformatsrN   r   s    r3   add_source_format6GoogleDriveIE._real_extract.<locals>.add_source_format   sj     ../1A1ABW1X / /E   88(6<<>!) 
  
rT   r   zDownloading confirmation pagezUnable to confirm downloadF)rA   rB   rC   zdownload-formactionzconfirmed sourcerT   )r   zuc-error-subcaptionzuc-error-captionz#unable to extract confirmation codeT)expectedr:   ttsurlr9   z.google.com/NID)domainpathrW   z&https://drive.google.com/thumbnail?id=length_seconds)r   r   r   r   r   r)   r*   )N)	_match_idurllibparser   _download_webpagesplitr,   r-   intr/   len_FORMATS_EXTrK   r^   r   r   r_   rM   r   r   _webpage_read_contentr
   r   r   raise_no_formatsr   	cookiejarclearr   extract_subtitlesextract_automatic_captions)rN   r   r   r   r   r   resolutionsrY   r2   
fmt_streamfmt_stream_splitr   
format_urlr   rQ   
resolutionr   r   r   r   confirmation_webpageconfirmed_source_urlr:   rP   r   r   r   rO   r   s   `                        @@@@r3   _real_extractGoogleDriveIE._real_extract   s   >>#&\\**4+A+A51'89L ,B ,N O
	< 8$'"#$45;BB3Gj)/R66s;hKyyLcS4DJJw/0#djj6J2K<MK

; 78	   -
#-#3#3C#8 '(1,(8!(<%	''++I6''/)EXEZD[(\]+J7!*
 )__Y7
HH!+A",Q-  q!' -* &;$>
	R 	R #:x8" || 566!$''+'A'A#x.M8 (B (G$ (+=.@TU[Y[,]]`]`ai]j )+23GI[befDLL$4$45J$K$K-d3++01FH\] E34FH\]EDF
 6%%ft%<$Vd;;t_8$#F+//v>rBLM%H AHL#I.>$?@//,K"&"A"A,#,	
 		
rT   )rF   )NN)__name__
__module____qualname____firstlineno__
_VALID_URL_TESTSr   _formatsitemsrK   r   rH   r]   rL   rF   classmethodr4   rR   ri   rl   rw   r   __static_attributes__)rr   kr;   s   000r3   r   r      sL   J Y10)]

 R15Nb
	 S	 Z
 O M _I'FP#,#5#5#;#;#=
N#=41u;1h;#=
NeL >& MP PK* GK!FO^ v
E Os   B/
4	B/
r   c                   \    \ rS rSrSrSrSSSS.SS	./rS
rSrS\ S\ S3r	S r
S rS rSrg)GoogleDriveFolderIEi&  zGoogleDrive:FolderzEhttps?://(?:docs|drive)\.google\.com/drive/folders/(?P<id>[\w-]{28,})zHhttps://drive.google.com/drive/folders/1dQ4sx0-__Nvg65rxTSgQrl7VyW_FZ9QIz!1dQ4sx0-__Nvg65rxTSgQrl7VyW_FZ9QIForrest)r   r      )r   r   playlist_countz=====vc17a3rwnndj=====a  /drive/v2beta/files?openDrive=true&reason=102&syncType=0&errorRecovery=false&q=trashed%20%3D%20false%20and%20'{folder_id}'%20in%20parents&fields=kind%2CnextPageToken%2Citems(kind%2CmodifiedDate%2CmodifiedByMeDate%2ClastViewedByMeDate%2CfileSize%2Cowners(kind%2CpermissionId%2Cid)%2ClastModifyingUser(kind%2CpermissionId%2Cid)%2ChasThumbnail%2CthumbnailVersion%2Ctitle%2Cid%2CresourceKey%2Cshared%2CsharedWithMeDate%2CuserPermission(role)%2CexplicitlyTrashed%2CmimeType%2CquotaBytesUsed%2Ccopyable%2CfileExtension%2CsharingUser(kind%2CpermissionId%2Cid)%2Cspaces%2Cversion%2CteamDriveId%2ChasAugmentedPermissions%2CcreatedDate%2CtrashingUser(kind%2CpermissionId%2Cid)%2CtrashedDate%2Cparents(id)%2CshortcutDetails(targetId%2CtargetMimeType%2CtargetLookupStatus)%2Ccapabilities(canCopy%2CcanDownload%2CcanEdit%2CcanAddChildren%2CcanDelete%2CcanRemoveChildren%2CcanShare%2CcanTrash%2CcanRename%2CcanReadTeamDrive%2CcanMoveTeamDriveItem)%2Clabels(starred%2Ctrashed%2Crestricted%2Cviewed))%2CincompleteSearch&appDataFilter=NO_APP_DATA&spaces=drive&pageToken={page_token}&maxResults=50&supportsTeamDrives=true&includeItemsFromAllDrives=true&corpora=default&orderBy=folder%2Ctitle_natural%20asc&retryCount=0&key={key} HTTP/1.1z--zM
content-type: application/http
content-transfer-encoding: binary

GET %s

--
c                     U R                   " SU4UR                  5       SSS.SU R                   S3US.S.UD6nU R                  " S	US
U40 UD6=(       d    0 $ )Nz.https://clients6.google.com/batch/drive/v2betaztext/plain;charset=UTF-8;zhttps://drive.google.com)zContent-TypeOriginzmultipart/mixed; boundary="")z$ctr   )r   r   r@   rX   zapi response)r   encode	_BOUNDARY_search_json)rN   	folder_idr   r   kwargsresponses         r3   	_call_apiGoogleDriveFolderIE._call_api<  sz    ))<	 KKM ;4 5T^^4DAF	 	   X~ySFSYWYYrT   c              #      #    SnUb]  U R                   R                  XUS9nU R                  XU R                  U-  5      nUS    S h  vN   UR	                  S5      nUb  M\  g g  N7f)NrX   )r   
page_tokenr   r   nextPageToken)_REQUESTr.   r   _DATArK   )rN   r   r   r   requestpages         r3   _get_folder_items%GoogleDriveFolderIE._get_folder_itemsI  sk     
$mm**Y[^*_G>>)$**w2FGDG}$$/2J	 $ %s   AA(	A&
A($A(c                    U R                  U5      nU R                  X5      nU R                  SUS5      nU R                  X$U R                  SU S3-  SS9nU R                  U R                  X$5      X%R                  S5      [        S S	9$ )
Nz
"(\w{39})"r   z/drive/v2beta/files/z	 HTTP/1.1F)rC   r   c                     SU S    3$ )Nz https://drive.google.com/file/d/r   r}   )items    r3   r   3GoogleDriveFolderIE._real_extract.<locals>.<lambda>[  s    4TUYZ^U_T`2arT   )iegetter)	r   r   r   r   r   playlist_from_matchesr   rK   r   )rN   r   r   r1   r   folder_infos         r3   r   !GoogleDriveFolderIE._real_extractQ  s    NN3'	((8  ?nnYTZZDXYbXcclBm5muzn{))""92Iw?W%a * c 	crT   r}   N)r   r   r   r   IE_NAMEr   r   r   r   r   r   r   r   r   r}   rT   r3   r   r   &  sj    "GYJY5
  F )I UH9+  + EZ3
crT   r   )r,   urllib.parser   commonr   youtuber   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r}   rT   r3   <module>r      sB    	  !    N
M N
b5c- 5crT   