package Ġcom . n jac que min . yout ub ed l Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġcom . cha quo . python . PyObject Ċ import Ġcom . cha quo . python . Python Ċ import Ġcom . cha quo . python . android . Android Platform Ċ import Ġcom . github . h ites h son d hi 8 8 . lib ffmpeg . Execute Binary Response Handler Ċ import Ġcom . github . h ites h son d hi 8 8 . lib ffmpeg . FF mpeg Ċ import Ġjava . io . File Ċ Ċ private Ġconst Ġval ĠF FM PEG _ TAG Ġ= Ġ" FF M PEG " Ċ Ċ class ĠY outube Downloader ( val Ġcontext : ĠContext , Ġval Ġcallbacks : ĠCallback s ?) Ġ{ ĊĊĠĠĠ Ġinterface ĠCallback s Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Ff mpeg Start () ĊĠĠĠĠĠĠĠ Ġfun Ġon Ff mpeg Progress ( message : ĠString ?) ĊĠĠĠĠĠĠĠ Ġfun Ġon Ff mpeg Failure ( message : ĠString ?) ĊĠĠĠĠĠĠĠ Ġfun Ġon Ff mpeg Success ( message : ĠString ?) ĊĠĠĠĠĠĠĠ Ġfun Ġon Ff mpeg Finish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhandler Thread Ġ= ĠHandler Thread (" background Thread "). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġbackground Handler Ġ= ĠHandler ( handler Thread . lo oper ) ĊĊĠĠĠ Ġprivate Ġval Ġmain Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠ Ġprivate Ġval Ġffmpeg Ġ= ĠFF mpeg . getInstance ( context ) !! ĊĊĠĠĠ Ġprivate Ġvar Ġy t Downloader : ĠPyObject ĊĊĠĠĠ Ġfun Ġdownload ( link : ĠString , Ġoutput : ĠFile , Ġdone Callback : Ġ( success : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy t Downloader . call Attr (" download ", ĠarrayOf ( link )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( ffmpeg . is FF mpeg Command Running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġffmpeg . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("- i ", ĠFile ( context . files Dir , Ġ" yt - dl . tmp "). absolute Path , Ġoutput . absolute Path ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠExecute Binary Response Handler () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( FF M PEG _ TAG , Ġ" Start ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Ff mpeg Start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress ( message : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( FF M PEG _ TAG , Ġ" Progress : Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Ff mpeg Progress ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( message : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( FF M PEG _ TAG , Ġ" Failure : Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Ff mpeg Failure ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Callback ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( message : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( FF M PEG _ TAG , Ġ" Success : Ġ$ message ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Ff mpeg Success ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Callback ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( FF M PEG _ TAG , Ġ" Finish ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Ff mpeg Finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġffmpeg . load Binary ( null ) Ġ// ĠIt Ġwill Ġfail Ġwith Ġexception Ġif Ġit Ġcannot Ġbe Ġloaded . ĠThis Ġshould Ġnot Ġhappen ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Python . is Started ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPython . start ( Android Platform ( context )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpy Ġ= ĠPython . getInstance () ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġpy . builtins . call Attr (" dict ") ĊĠĠĠĠĠĠĠ Ġoptions . call Attr ("__ set item __", Ġ" out tmpl ", ĠFile ( context . files Dir , Ġ" yt - dl . tmp "). absolute Path ) ĊĠĠĠĠĠĠĠ Ġoptions . call Attr ("__ set item __", Ġ" format ", Ġ" best audio / best ") ĊĊĠĠĠĠĠĠĠ Ġval Ġy t Ġ= Ġpy . getModule (" youtube _ dl ") ĊĠĠĠĠĠĠĠ Ġy t Downloader Ġ= Ġy t . call Attr (" Y outube DL ", Ġoptions ) ĊĊĠĠĠ Ġ} Ċ }