package Ġblue . st arry . ep gb ird Ċ Ċ import Ġcom . twitter . twitter text . Twitter Text Parser Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Offset Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . pow Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . time . milliseconds Ċ Ċ class ĠTemplate Formatter ( private Ġval Ġitem : ĠProgram Item ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ channel : ĠChannel Item ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġ_ comment : ĠComment Info ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Channel (): ĠChannel Item ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ channel Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ channel Ġ= ĠE PG Station Api . get Channels (). find Ġ{ Ġit . id Ġ== Ġitem . channelId Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ_ channel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Comment (): ĠComment Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ comment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ comment Ġ= ĠS aya Api . get Comment Info ( getChannel () Ġ?: Ġreturn Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ_ comment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġformat (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ çµ Į éģİ æĻĤéĸĵ Ġ( åĪĨ ) ĊĠĠĠĠĠĠĠ Ġval Ġelapsed Minutes Ġ= Ġ( Instant . now (). to Epoch Milli () Ġ- Ġitem . start At ). milliseconds . in Minutes . round ToInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ äºĪ ç´Ħ è¿½åĬł ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . is Reserve Ġ-> ĠEnv . RESER V ES _ FORMAT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĮ² çĶ» éĸĭå§ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . is Recording Ġ&& Ġelapsed Minutes Ġ== Ġ 0 Ġ-> ĠEnv . RECORD _ START _ FORMAT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĮ² çĶ» ä¸Ń ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . is Recording Ġ-> ĠEnv . RECORD ING _ FORMAT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĮ² çĶ» å®Į äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠEnv . RECORD _ END _ FORMAT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġtemplate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĶ¹ è¡Į æĸĩåŃĹ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% BR % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ äºĪ ç´Ħ ãģ® ãĤ¿ãĤ¤ ãĥĹ Ġ( ãĥ« ãĥ¼ãĥ« Ġor Ġ æīĭ åĭķ ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% RESER VE _ TYPE % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . rule Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ãĥ« ãĥ¼ãĥ« " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" æīĭ åĭķ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ åĲį ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åįĬ è§Ĵ ãĥ» åħ¨ è§Ĵ ãģĭ ãģ¯ ĠUSE _ HALF _ WIDTH Ġ çĴ°å¢ĥ å¤īæķ° ãģ«ãĤĪ ãĤĬ ãĤ³ ãĥ³ãĥĪ ãĥŃ ãĥ¼ãĥ« åı¯èĥ½ , Ġ ä»¥ä¸ĭ åĲĮ æ§ ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% NAME % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ ģ ãĥ£ ãĥ³ ãĥį ãĥ« åĲį , Ġ åĲĮ ä¸Ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% CHANNEL % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Env . USE _ HALF _ WIDTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Channel ()?. half Width Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Channel ()?. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ èª¬æĺİ , Ġ åĲĮ ä¸Ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥĩ ãĥķãĤ© ãĥ« ãĥĪ ãģ¯ Ġ 5 0 Ġ æĸĩåŃĹ ãģ¾ãģ§ åĩºåĬĽ ãģĻãĤĭ ãģĮ ĠDESCRIPTION _ LENGTH Ġ çĴ°å¢ĥ å¤īæķ° ãģ«ãĤĪ ãĤĬ ãĤ³ ãĥ³ãĥĪ ãĥŃ ãĥ¼ãĥ« åı¯èĥ½ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% DESCRIPTION % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ item . description . or Empty () }\ n ${ item . extended . or Empty ()} ". trim (). omit ( Env . DESCRIPTION _ LENGTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çµ Į éģİ æĻĤéĸĵ Ġ( åĪĨ ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRES ER V ES _ FORMAT Ġãģ§ ä½¿çĶ¨ ãģĻãĤĭãģĵãģ¨ ãģ¯ æĥ³ å®ļ ãģķãĤĮ ãģ¦ãģĦ ãģªãģĦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% EL AP SED _ MIN UTES % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelapsed Minutes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ ãģ® éĸĭå§ĭ æĻĤ åĪ» ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ Ļ Ĥ åĪ» ãģ® ãĥķãĤ© ãĥ¼ãĥ ŀ ãĥĥãĥĪ ãģ¯ ĠTIME _ FORMAT Ġ çĴ°å¢ĥ å¤īæķ° ãģ«ãĤĪ ãĤĬ ãĤ³ ãĥ³ãĥĪ ãĥŃ ãĥ¼ãĥ« åı¯èĥ½ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% START _ TIME % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠDateTime Formatter . of Pattern ( Env . TIME _ FORMAT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart At Ġ= ĠLocalDateTime . of Instant ( Instant . of Epoch Milli ( item . start At ), ĠZone Offset . system Default ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . format ( start At ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ ãģ® çµĤ äºĨ æĻĤ åĪ» , Ġ åĲĮ ä¸Ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% END _ TIME % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠDateTime Formatter . of Pattern ( Env . TIME _ FORMAT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend At Ġ= ĠLocalDateTime . of Instant ( Instant . of Epoch Milli ( item . end At ), ĠZone Offset . system Default ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . format ( end At ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ ãģ® éķ· ãģķ Ġ( xx æĻĤéĸĵ xx åĪĨ Ġ å½¢å¼ı ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% DURATION % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġ( item . end At Ġ- Ġitem . start At ). milliseconds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġfloor ( duration . in Hours ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġ Ġduration . in Minutes . round ToInt () Ġ- Ġhours Ġ* Ġ 6 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hours Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("${ hours } æĻĤéĸĵ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("${ minutes } åĪĨ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ ãģ® å®¹ éĩı Ġ( GB Ġ åįĺ ä½į ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĮ² çĶ» æ¸ Ī ãģ§ ãģª ãģĳ ãĤĮãģ° ç©º æĸĩåŃĹ ãĤĴ åĩºåĬĽ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% SIZE _ GB % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg iga Ġ= Ġ 2 . 0 . pow ( 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . video Files . first OrNull ()?. size ?. div ( g iga )?. let Ġ{ ĠString . format ("% . 1 f ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ³ ãĥ¡ãĥ³ãĥĪ ãģ® ãĥĢ ãĤ¤ ãĤ¸ãĤ§ ãĤ¹ãĥĪ Ġ( s aya ĠãģĮ å¿ħè¦ģ ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% COMMENT _ DIG EST % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Comment ()?. last ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ³ ãĥ¡ãĥ³ãĥĪ ãģ® åĭ ¢ ãģĦ Ġ(/ min ), Ġ åĲĮ ä¸Ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% COMMENT _ FORCE % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Comment ()?. force ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ ī ãĥŃ ãĥĥãĥĹ æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% DROP _ COUNT % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . drop LogFile ?. drop Cnt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¨ ãĥ© ãĥ¼ æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% ERROR _ COUNT % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . drop LogFile ?. error Cnt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¹ ãĤ¯ãĥ© ãĥ³ ãĥĸ ãĥ« æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% SCR AM BLE _ COUNT % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . drop LogFile ?. sc ram bling Cnt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĺł åĥı ãģ® ãĤ³ ãĥ¼ãĥ ĩ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% VIDEO _ CODEC % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . video Type ?. toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĺł åĥı ãģ® è§£ åĥı åº¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% VIDEO _ RESOL UTION % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . video Resolution ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éŁ³ å£° ãģ® ãĤµ ãĥ³ ãĥĹãĥª ãĥ³ãĤ° åĳ¨ æ³¢ æķ° Ġ( k Hz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. replace ("% AUDIO _ SAMP LING _ RATE _ K HZ % ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . audio Sampling Rate ?. div ( 1 0 0 0 . 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. trim () ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! Twitter Text Parser . parse Tweet ( text ). isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . drop Last ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĩº çı¾ ãģĹãģŁ Ġ` pattern ` ĠãĤĴ è© ķ ä¾¡ ãģĹãģŁ Ġblock Ġãģ§ ç½® æıĽ ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpattern Ġ åĩº çı¾ æĸĩåŃĹåĪĹ ĊĠĠĠĠ Ġ* Ġ@ param Ġblock Ġ éģ ħ å»¶ è© ķ ä¾¡ ãģķãĤĮãĤĭ ç½® æıĽ æĸĩåŃĹåĪĹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinline Ġfun ĠString . replace ( pattern : ĠString , Ġblock : Ġ() Ġ-> ĠAny ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! contains ( pattern )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġblock ()?. toString (). or Empty () ĊĠĠĠĠĠĠĠ Ġreturn Ġreplace ( pattern , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĸĩåŃĹåĪĹ ãģ® éķ· ãģķ ãĤĴ Ġ` limit ` Ġãģ« åĪ¶ éĻĲ ãģĹ , Ġ è¶ħ ãģĪ ãģŁ åł´åĲĪ ãģ«ãģ¯ ä¸ī çĤ¹ ãĥª ãĥ¼ãĥ Ģ Ġ( âĢ¦ ) ĠãĤĴ ä»ĺ ä¸İ ãģĻãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlimit Ġ æĸĩåŃĹåĪĹ ãģ® æľĢå¤§ éķ· ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠString . omit ( limit : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( length Ġ> Ġlimit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake ( limit ) Ġ+ Ġ" âĢ¦ " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ