/* Ċ Ġ* ĠSPDX - File Copyright Text : Ġ 2 0 2 2 ĠA rs en iy ĠGra ur Ġ< me @ arg ra ur . dev > Ċ Ġ* ĠSPDX - License - Identifier : ĠMIT Ċ Ġ*/ Ċ Ċ package Ġdev . arg ra ur . ao sp . builder . android Ċ Ċ import Ġcom . github . kot l inte le gram bot . dispatcher . handlers . CommandHandler Environment Ċ import Ġcom . github . kot l inte le gram bot . entities . Chat Id Ċ import Ġcom . github . kot l inte le gram bot . entities . Parse Mode Ċ import Ġcom . github . kot l inte le gram bot . entities . Telegram File Ċ Ċ import Ġdev . arg ra ur . ao sp . builder . android . config . Device Build Config Ċ import Ġdev . arg ra ur . ao sp . builder . telegram . command . Job Command Ċ import Ġdev . arg ra ur . ao sp . builder . utils . Job Ċ import Ġdev . arg ra ur . ao sp . builder . utils . Job Manager Ċ import Ġdev . arg ra ur . ao sp . builder . utils . Logger Ċ import Ġdev . arg ra ur . ao sp . builder . utils . observer . Observable Ċ import Ġdev . arg ra ur . ao sp . builder . utils . observer . Observer Ċ import Ġdev . arg ra ur . ao sp . builder . android . utils . Output . Companion . output Ċ Ċ import Ġjava . io . File Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ class ĠKernel Build ( private Ġval Ġcaller : ĠObserver ): ĠObserver Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠKernel Build :: class . java . simple Name ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġconfig Ġ= ĠDevice Build Config . getInstance () ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger . getInstance () ĊĠĠĠ Ġprivate Ġval Ġjob Manager Ġ= ĠJob Manager . getInstance () ĊĠĠĠ Ġprivate Ġval Ġjob : ĠJob ĊĠĠĠ Ġvar Ġis Telegram Ġby ĠDeleg ates . notNull < Boolean >() ĊĠĠĠ Ġvar Ġe : ĠCommand Handler Environment ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( caller Ġis ĠJob Command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . e Ġ= Ġcaller . e ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Telegram Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Telegram Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠGetting Ġrequired Ġconfigs Ġfor Ġkernel Ġbuild ĊĠĠĠĠĠĠĠ Ġval Ġkernel Dir Ġ= Ġ" kernel " ĊĠĠĠĠĠĠĠ Ġval Ġkernel Build Script Ġ= Ġ"./ build / build . sh " ĊĠĠĠĠĠĠĠ Ġval Ġkernel Name Ġ= Ġconfig . kernel Name ĊĠĠĠĠĠĠĠ Ġval Ġkernel Config Ġ= Ġconfig . kernel Config ĊĠĠĠĠĠĠĠ Ġval Ġkernel Dist Dir Ġ= Ġconfig . kernel Dist Dir ĊĠĠĠĠĠĠĠ Ġval Ġout Dir Ġ= Ġ" out " ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġcommand . append ("# !/ bin / bash \ n ") ĊĠĠĠĠĠĠĠ Ġcommand . append (" set Ġ- e \ n ") ĊĠĠĠĠĠĠĠ Ġcommand . append (" cd Ġ$ kernel Dir \ n ") ĊĠĠĠĠĠĠĠ Ġcommand . append (" export ĠOUT _ DIR =$ out Dir \ n ") ĊĠĠĠĠĠĠĠ Ġif Ġ( kernel Dist Dir . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . append (" export ĠDIST _ DIR =$ kernel Dist Dir \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommand . append (" test Ġ- e Ġ$ kernel Build Script \ n ") ĊĠĠĠĠĠĠĠ Ġif Ġ( kernel Config . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . append (" export ĠBUILD _ CONFIG =$ kernel Name /$ kernel Config \ n ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . append (" export ĠK ERNEL _ DIR =$ kernel Name \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommand . append ("$ kernel Build Script Ġ- j ${ config . threads }") ĊĊĠĠĠĠĠĠĠ Ġlogger . I ( TAG , Ġ" Starting Ġkernel Ġbuild Ġwith Ġcommand :\ n $ command ") ĊĠĠĠĠĠĠĠ Ġoutput (" Starting Ġkernel Ġbuild Ġwith Ġcommand :\ n < code >$ command </ code >", Ġis Telegram , Ġe ) ĊĠĠĠĠĠĠĠ Ġjob Ġ= ĠJob ( command . toString ()) ĊĠĠĠĠĠĠĠ Ġjob . start () ĊĠĠĠĠĠĠĠ Ġval Ġpid Ġ= Ġjob Manager . add Task ( this , Ġjob ) ĊĠĠĠĠĠĠĠ Ġoutput (" Started Ġkernel Ġbuild Ġjob Ġwith Ġinternal ĠPID Ġ< code >$ pid </ code >", Ġis Telegram , Ġe ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Observer Event ( o : ĠObservable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . I ( TAG , Ġ" Job Ġfinished Ġwith Ġexit Ġcode : Ġ${ job . process . exit Value () }") ĊĠĠĠĠĠĠĠ Ġval Ġfile Output Ġ= Ġ" output -${ System . currentTimeMillis ()}. txt " ĊĠĠĠĠĠĠĠ ĠFile ( file Output ). write Text ( job . output . toString ()) ĊĠĠĠĠĠĠĠ Ġlogger . I ( TAG , Ġ" W rote Ġjob Ġoutput Ġto Ġfile : Ġ$ file Output ") ĊĠĠĠĠĠĠĠ Ġval Ġfile Error Ġ= Ġ" error -${ System . currentTimeMillis ()}. txt " ĊĠĠĠĠĠĠĠ ĠFile ( file Error ). write Text ( job . error . toString ()) ĊĠĠĠĠĠĠĠ Ġlogger . I ( TAG , Ġ" W rote Ġjob Ġerrors Ġto Ġfile : Ġ$ file Error ") ĊĠĠĠĠĠĠĠ Ġoutput ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Kernel Ġbuild Ġfinished Ġwith Ġexit Ġcode : Ġ< code >${ job . process . exit Value () }</ code >", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Telegram , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Telegram ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Ġ( e !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot . send Document ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChat Id . from Id ( message . chat . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTelegram File . By File ( File ( file Output )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaption Ġ= Ġ"< b > Kernel Ġbuild Ġoutput </ b >", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParse Mode . HTML ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot . send Document ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChat Id . from Id ( message . chat . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTelegram File . By File ( File ( file Error )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaption Ġ= Ġ"< b > Kernel Ġbuild Ġerrors </ b >", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParse Mode . HTML ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( job . process . exit Value () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" Kernel Ġbuild Ġhas Ġbeen Ġfinished Ġsuccessfully !", Ġis Telegram , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" Kernel Ġbuild Ġhas Ġfailed !", Ġis Telegram , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }