
    ?j4                       d Z ddlmZ ddlmZ ddlmZ ddlZddlm	Z
 ddlmZ ddlm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mZmZm Z m!Z! ddl"m#Z#m$Z$  e       Z% ed      Z& ejN                  dddd      Z(d@dZ)e(jU                          ejV                  ddde)dd      f	 	 	 dAd       Z,e(j[                          ejV                  dd       ejV                  dddd       ejV                  dd d!      f	 	 	 	 	 	 	 dBd"       Z.e(j[                          ej^                  d#d$       ejV                  dd%       ejV                  dddd      f	 	 	 	 	 	 	 dCd&       Z0e(j[                          ej^                  d#d'       ejV                  d(d)d*d+       ejV                  dd%       ejV                  dddd      f	 	 	 	 	 	 	 	 	 dDd,       Z1e(j[                  d-       ej^                  d#d.       ejV                  dd%       ejV                  dddd      f	 	 	 	 	 	 	 dCd/       Z2e(j[                          ej^                  d#d$       ejV                  d0d1d2d3       ejV                  dd4d5d       ejV                  ddd6d7       ejV                  dddd       ejV                  dd8d9       ejV                  dd:d;      f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dEd<       Z3dd=dFd>Z4dGd?Z5y)HuD   Typer CLI application — auth, download, info, search, list-splits.    )annotations)Path)OptionalN)print)Console)Panel)Table)__version__)AuthExpiredErrorPlayAPIErrorget_deliveryget_detailslist_splitspurchasesearch_apps)
clear_authensure_authfetch_tokenload_cached_auth	save_auth)DownloadSpecdownload_batchT)stderrgplaydlzCDownload APKs from Google Play Store with anonymous authentication.F)namehelpadd_completionno_args_is_helpc                V    | r't        dt         d       t        j                         y )Nzgplaydl [bold]z[/bold])rprintr
   typerExit)values    ?/home/ubuntu/.local/lib/python3.12/site-packages/gplaydl/cli.py_version_callbackr%   ,   s'    }G45jjl     z	--versionz-VzShow version and exit.)callbackis_eagerr   c                     y)u>   GPlay APK Downloader — download APKs from Google Play Store.N )versions    r$   mainr,   2   s    r&   arm64zArchitecture: arm64 or armv7.)r   z--dispenserz-dzCustom dispenser URL.z--clearzRemove all cached tokens.c                    |r)t                t        d       t        j                         t        d|xs d        t        d|         t                t        j                  d      5  t        ||       }ddd       s+t        j                  d       t        j                  d	
      t        ||       }t        t        j                  d|j                  dd       d|j                  dd       d| d             y# 1 sw Y   xY w)z3Acquire an anonymous auth token from the dispenser.z)[green]All cached tokens removed.[/green]z[dim]Dispenser:[/dim] zhttps://auroraoss.com/api/authz[dim]Architecture:[/dim] z#Rotating through device profiles...)dispenser_urlarchNu;   [red]Authentication failed — all profiles rejected.[/red]   codez0[bold green]Authenticated[/bold green]
Email  : emailN/Az

GSF ID : gsfIdz

Saved  : Tokentitle)r   r    r!   r"   consolestatusr   errr   r   r   fitget)r0   	dispensercleardatapaths        r$   authrC   ?   s     :;jjl
#I$Q1Q#RST
&tf-.
H	=	> ?>? 		OPjja  T4 D
599HHWe,- .HHWe,- .6	  ? ?s   +DD.z!Package name (e.g. com.whatsapp).zArchitecture for token.c                   t        ||      }t        j                  d|  d      5  	 	 t        | |      }d	d	d	       t        j                  xs | d
d      }|j                  dd       |j                  d       |j                  d|j                         |j                  d|j                   d|j                    d       |j                  d|j"                  xs d       |j                  d|j$                  xs d       |j                  d|j&                  xs d       |j                  d|j(                         t        j                  |       y	# t        $ r t        ||d      }t        | |      }Y Hw xY w# t
        $ r4}t        j                  d| d       t        j                  d      d	}~ww xY w# 1 sw Y   xY w)z"Show app details from Google Play.Fetching details for [bold]
[/bold]...Tforce[red][/red]r1   r2   NFbold)r9   show_headertitle_styleFielddimstyleValuePackageVersionz ()	Developerr5   Rating	Downloadsz
Play Store)_require_authr:   r;   r   r   r   r<   r   r!   r"   r	   r9   
add_columnadd_rowpackageversion_stringversion_code	developerrating	downloadsplay_url)r\   r0   r?   	auth_datadetailsexctables          r$   inforg   c   s    dI.I	5gYjI	J 	%	%:%gy9	% 0eQWXE	WE*	W	MM)W__-	MM) 6 67r':N:N9OqQR	MM+w009E:	MM(GNN3e4	MM+w009E:	MM, 0 01MM%! $ :)$	F	%gy9:  	%IIcU&)***!$$	%	% 	%s@   GE#E>:F=E>>F	F>
/F99F>>GGzSearch query.
   z--limitz-lzMax results.c                   t        ||      }t        j                  d|  d      5  	 	 t        | ||      }d
d
d
       st        d       t        j                         t        d|  d      }|j                  ddd       |j                  dd       |j                  d       t        |d      D ]'  \  }}	|j                  t        |      |	d   |	d          ) t        j                  |       y
# t        $ r t        ||d      }t        | ||      }Y w xY w# t
        $ r4}t        j                  d| d       t        j                  d	      d
}~ww xY w# 1 sw Y   *xY w)zSearch for apps on Google Play.zSearching for [bold]rF   )limitTrG   rI   rJ   r1   r2   Nz"[yellow]No results found.[/yellow]zResults for ""r8   #rO      rQ   widthTitlerK   rP   rS   r9   r\   )rY   r:   r;   r   r   r   r<   r   r!   r"   r    r	   rZ   	enumerater[   str)
queryrj   r0   r?   rc   resultsre   rf   iapp_items
             r$   searchrw      sa    dI.I	.ugZ@	A 	%	%E%eYeD	% 34jjl.r23E	SQ/	WF+	Y !, F8c!fhw/)1DEFMM%# $ E)$	F	%eYeDE  	%IIcU&)***!$$	%	% 	%s@   EC44%DDDD	E(/EEEE)zlist-splitszPackage name.c                   t        ||      }t        j                  d|  d      5  	 	 t        | |      }d	d	d	       s#t        d
|  d       t        j                         t        d|        }|j                  ddd       |j                  d       t        |d      D ]   \  }}|j                  t        |      |       " t        j                  |       t        dt!        |       d       y	# t        $ r t        ||d      }t        | |      }Y w xY w# t
        $ r4}t        j                  d| d       t        j                  d      d	}~ww xY w# 1 sw Y   )xY w)z%List available split APKs for an app.zFetching splits for [bold]rF   TrG   rI   rJ   r1   r2   Nz[yellow]z has no split APKs.[/yellow]zSplits for r8   rl   rO   rm   rn   z
Split namez
[dim]Total: z splits[/dim])rY   r:   r;   api_list_splitsr   r   r<   r   r!   r"   r    r	   rZ   rq   r[   rr   len)	r\   r0   r?   rc   splitsre   rf   ru   r   s	            r$   list_splits_cmdr|      sU    dI.I	4WIZH	I 	%	%=()<	% '">?@jjl+gY/0E	SQ/	\"VQ' $4c!fd#$MM%
^CK=67# $ =)$	F	()<=  	%IIcU&)***!$$	%	% 	%s@   EC33#DDDD	E%/EEEE&.z--outputz-ozOutput directory.z--archz-az-vzSpecific version code.z--no-splitszSkip downloading split APKs.z--no-extrasz5Skip downloading additional files (OBB, asset packs).c                \   t        ||      }|j                  dd       	 	 t        j                  d|  d      5  t	        | |      }ddd       |xs j
                  }	t        j                  d      5  t        | |	|       t        | |	|      }
ddd       t        t        j                   dj"                   d|j$                   d|	 d|              |  d|	 d}||z  }t'        
j(                  ||
j*                  |      }g }|
j,                  rRsP|
j,                  D ]A  }|  d|	 d|j.                   d}|j1                  t'        |j2                  ||z  |             C |s|
j4                  r|
j4                  D ]  }|j6                  r!|  d|	 d|j8                   |j:                   }n*|j8                   d|j
                   d|  |j:                   }|j1                  t'        |j2                  ||z  |j*                  ||j<                                |g|z   }t?        |      }|
j@                  tC        fd|
j,                  D              z   }|s|tC        d |
j4                  D              z  }| d|d
kD  rdnd }t        d| dtE        |       d       tG        |       t                tI        dd       }|jK                  d!d"#       |jK                  d$d%&       |jM                  |tE        |jO                         jP                               |
j,                  rysw|
j,                  D ]h  }||  d|	 d|j.                   dz  }|jS                         s,|jM                  |j.                  tE        |jO                         jP                               j |s|
j4                  r|
j4                  D ]  }|j6                  r!|  d|	 d|j8                   |j:                   }n*|j8                   d|j
                   d|  |j:                   }||z  }|jS                         sp|jM                  |j.                  tE        |jO                         jP                                t        j                  |       |
j,                  rst        d'       t        d(       y# 1 sw Y   _xY w# 1 sw Y   $xY w# t        $ r t        ||d      }t        j                  d|  d      5  t	        | |      }ddd       n# 1 sw Y   nxY w|xs j
                  }	t        j                  d      5  t        | |	|       t        | |	|      }
ddd       n# 1 sw Y   nxY wY w xY w# t        $ r4}t        j                  d| d	       t        j                  d
      d}~ww xY w))zBDownload an APK (with splits + additional files) from Google Play.T)parentsexist_okrE   rF   Nz+Acquiring app and fetching download URLs...rG   rI   rJ   r1   r2   z[bold]z[/bold]
z  (vc rU   r8   -z.apk)urldestcookieslabel)r   r   r   r}   )r   r   r   r   gzippedc              3  <   K   | ]  }r|j                     y wNsize).0s	no_splitss     r$   	<genexpr>zdownload.<locals>.<genexpr>  s     -_U^aff-_s   c              3  4   K   | ]  }|j                     y wr   r   )r   afs     r$   r   zdownload.<locals>.<genexpr>  s     Fb"''Fs   z filer    z
[bold]Downloading z[/bold]  [dim](z)[/dim]zDownloaded files)r9   rL   FilerK   rP   Sizeright)justifyz\
[dim]Tip: install split APKs to a device with [bold]adb install-multiple *.apk[/bold][/dim]z,
[green bold]Download complete![/green bold])*rY   mkdirr:   r;   r   r^   r   r   r   r   r<   r   r!   r"   r    r   r=   r9   r]   r   download_urlr   r{   r   appendr   additional_filesis_asset_pack
type_label	extensionr   rz   download_sizesum_fmtr   r	   rZ   r[   statst_sizeexists)r\   outputr0   r+   r?   r   	no_extrasrc   rd   vcdeliveryre   	base_name	base_path	base_specextrassplitr   r   	all_specstotal_files
total_size
file_labelfiles_tablespfnameaps        `                     r$   downloadr      sF    dI.I
LLL-!	@"=gYj QR :%gy9:0G00B MN @"i0'Y?@ 599
y!!
"&A	/  )1RD%I"I!!	  	I
 "$Fy__ 	WEYat1UZZL5DMM,5996D=PTUV	W 22++ 	B!!B4q~F--"//):!G9R\\NSMM,FF$

BJJ 	 f$Ii.K''#-_hoo-_*__JcFH,E,EFFF
=[1_c"%EFJ
!*_T*=M<NgVW9 H0dCK60673	4	(8(@(@#ABy__ 	FEWIQrd!EJJ<t<<Byy{##BGGT"'')2C2C-DE	F
 22++ 	FB")1RD"--G==/2??*;1WIbll^T%Byy{##BGGT"'')2C2C-DE	F MM+y<	

 :;q: :@ @   	@%dITBI"=gYj QR :%gy9: : :0G00B MN @"i0'Y?@ @ @	@  !		E#f%&jja  !s   S  R&	-S  6R3S  &R0+S  3R=8S   0U+0T=	U+T	,U+7U	U+U$	 U+'U. *U++U. .	V+7/V&&V+rG   c               |    t        | ||      }|s+t        j                  d       t        j                  d      |S )z.Return auth dict or exit with a helpful error.)r0   r/   force_refreshzW[red]Could not obtain an auth token. Try running [bold]gplaydl auth[/bold] first.[/red]r1   r2   )r   r<   r   r!   r"   )r0   r?   rH   rA   s       r$   rY   rY   >  s;    D	OD		A	
 jja  Kr&   c                J    | sydD ]  }| dk  r
| dd| c S | dz  }  | ddS )z(Format bytes as a human-readable string.Unknown)BKBMBGBi   z.1f z TBr*   )
size_bytesunits     r$   r   r   J  sO    '  %Qtf--d
 S!!r&   )r#   boolreturnNone)r+   r   r   r   )r0   rr   r?   Optional[str]r@   r   r   r   )r\   rr   r0   rr   r?   r   r   r   )
rs   rr   rj   intr0   rr   r?   r   r   r   )r\   rr   r   r   r0   rr   r+   zOptional[int]r?   r   r   r   r   r   r   r   )r0   rr   r?   r   rH   r   r   dict)r   zint | floatr   rr   )6__doc__
__future__r   pathlibr   typingr   r!   richr   r    rich.consoler   
rich.panelr   
rich.tabler	   r   r
   gplaydl.apir   r   r   r   r   ry   r   r   gplaydl.authr   r   r   r   r   gplaydl.downloadr   r   r:   r<   Typerappr%   r'   Optionr,   commandrC   Argumentrg   rw   r|   r   rY   r   r*   r&   r$   <module>r      s   J "              :
)Tekk		N	  ELL{D+<t%II
 
I I W+JK+u||D-Lcd%,,ui6QR
  
	 F !5>>#,OPW+DE+u||D-Lcd
  
	 D /:b)TGW+DE+u||D-Lcd	  	
 
 H ]!5>>#O<W+DE+u||D-Lcd88
8 8 
	8 8F !5>>#,OP5<<Z<OPWh;Z[)U\\$TH`a+u||D-Lcd"ell5->\]"ell5->uvh<h<h< h< 	h<
 h< h< h< 
h< h<\ IN 	"r&   