package Ġde . daniel sch ol z . file Indexer . actions Ċ Ċ import Ġde . daniel sch ol z . file Indexer . Global Ċ import Ġde . daniel sch ol z . file Indexer . common . format As FileSize Ċ import Ġde . daniel sch ol z . file Indexer . common . if Zero Ċ import Ġde . daniel sch ol z . file Indexer . common . left Pad Ċ import Ġde . daniel sch ol z . file Indexer . gui . Inf op anel Swing Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġjava . util . concurrent . atomic . Atomic Long Ċ import Ġjavax . swing . Swing Utilities Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠIndex Files Stats ( private Ġvar Ġcurrent Parallel Reads : Ġ() Ġ-> ĠString ) Ġ{ ĊĊĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĊĠĠ Ġ/** ĠNumber Ġof Ġalready Ġindexed Ġfiles Ġ( incl . Ġfiles Ġin Ġarch ives ) Ġ*/ ĊĠĠ Ġvar Ġindexed Files Count Ġ= ĠAtomicInteger () ĊĊĠĠ Ġ/** ĠNumber Ġof Ġalready Ġindexed Ġfiles Ġ( ex cl . Ġfiles Ġin Ġarch ives ) Ġ*/ ĊĠĠ Ġvar Ġindexed Files Count No Archive Ġ= ĠAtomicInteger () ĊĊĠĠ Ġ/** Ġtotal Ġfile Ġsize Ġof Ġalready Ġindexed Ġfiles Ġ( incl . Ġfiles Ġin Ġarch ives ) Ġ*/ ĊĠĠ Ġvar Ġindexed Files Size Ġ= ĠAtomic Long () ĊĊĠĠ Ġ/** Ġtotal Ġfile Ġsize Ġof Ġalready Ġindexed Ġfiles Ġ( ex cl . Ġfiles Ġin Ġarch ives ) Ġ*/ ĊĠĠ Ġvar Ġindexed Files Size No Archive Ġ= ĠAtomic Long () ĊĊĠĠ Ġ@ Volatile ĊĠĠ Ġvar Ġcurrent Processed File : ĠString Ġ= Ġ"" ĊĊĠĠ Ġ/** Ġtotal Ġfile Ġsize Ġof Ġall Ġfiles Ġto Ġindex Ġ( incl . Ġfiles Ġin Ġarch ives ) Ġ*/ ĊĠĠ Ġvar Ġfiles Size All Ġ= Ġ 0 L ĊĠĠ Ġvar Ġfiles Count All Ġ= Ġ 0 ĊĊĠĠ Ġ@ Volatile ĊĠĠ Ġprivate Ġvar Ġtimestamp Millis Begin Ġ= Ġ 0 L ĊĊĠĠ Ġ@ Volatile ĊĠĠ Ġprivate Ġvar Ġprocessed Mb PerSecond : ĠDouble Ġ= Ġ 0 . 0 ĊĊĠĠ Ġprivate Ġval Ġdecimal Format Ġ= ĠDecimal Format (" 0 . 0 0 ") ĊĊĠĠ Ġprivate Ġval Ġthread Ġ= ĠThread ({ Ġrefresh () Ġ}, Ġ" GUI - Refresh ") ĊĊĠĠ Ġfun Ġstart Refresh () Ġ{ ĊĠĠĠĠĠ Ġtimestamp Millis Begin Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠ Ġthread . start () ĊĠĠ Ġ} ĊĊĠĠ Ġfun Ġstop Refresh () Ġ{ ĊĠĠĠĠĠ Ġthread . interrupt () ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSw ing Utilities . invoke Later Ġ{ Ġupdate Info Panel () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġupdate Info Panel () Ġ{ ĊĠĠĠĠĠ Ġcalc Processed Mb PerSecond () ĊĊĠĠĠĠĠ ĠInf op anel Swing . set Progress Total ( ĊĠĠĠĠĠĠĠĠ Ġ"${ ( indexed Files Size . get () Ġ* Ġ 1 0 0 Ġ/ Ġfiles Size All . if Zero ( 1 )) }% Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ ${ indexed Files Size . get (). format As FileSize ()} Ġ/ Ġ${ files Size All . format As FileSize ()} ] Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" [$ indexed Files Count Ġ/ Ġ$ files Count All ]" ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠInf op anel Swing . set Duration ( get Duration ()) ĊĠĠĠĠĠ ĠInf op anel Swing . set Remaining Duration ( get Est imated Duration ()) ĊĠĠĠĠĠ ĠInf op anel Swing . set Fast Mode Data ( get Fast Mode Stats ()) ĊĠĠĠĠĠ ĠInf op anel Swing . set New Indexed Data ( Global . stat . new Indexed Files Size . get (). format As FileSize ()) ĊĠĠĠĠĠ ĠInf op anel Swing . set Processed Mb Per Sec ( decimal Format . format ( processed Mb PerSecond ) Ġ+ Ġ" ĠMB / sec .") ĊĠĠĠĠĠ ĠInf op anel Swing . set Db Time ("" Ġ+ Ġ( Global . stat . query Time Ġ/ Ġ 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ) Ġ+ Ġ" Ġsec . Ġ/ Ġnumber : Ġ${ Global . stat . query Count }") ĊĠĠĠĠĠ ĠInf op anel Swing . setCurrent Parallel Reads ( current Parallel Reads ()) ĊĠĠĠĠĠ ĠInf op anel Swing . setCurrent Processed Filename ( current Processed File ) ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġcalc Processed Mb PerSecond () Ġ{ ĊĠĠĠĠĠ Ġprocessed Mb PerSecond Ġ= Ġindexed Files Size . get () Ġ/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( System . currentTimeMillis () Ġ- Ġtimestamp Millis Begin ) Ġ/ Ġ 1 _ 0 0 0 ). if Zero ( 1 ) Ġ/ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 _ 0 0 0 _ 0 0 0 . 0 Ċ // ĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġ( System . nano Time () Ġ- ĠstartTime ) Ġ/ Ġ 1 0 0 0 Ġ// Ġmicro sec Ċ // ĠĠĠĠĠĠĠĠ Ġif Ġ( duration Ġ> Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewVal Ġ= Ġ( file Size Ġ* Ġ 1 0 0 0 Ġ* Ġ 1 0 0 0 Ġ/ Ġduration ) Ġ* Ġ 1 . 0 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Val . is Finite ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Bytes PerSecond Ġ== Ġ 0 . 0 ĠĠĠĠĠĠĠĠ Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Bytes PerSecond Ġ= ĠnewVal Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewVal Ġ< Ġprocessed Bytes PerSecond Ġ* Ġ 0 . 7 Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Bytes PerSecond Ġ= ĠnewVal Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Bytes PerSecond Ġ= Ġprocessed Bytes PerSecond Ġ* Ġ 0 . 9 Ġ+ ĠnewVal Ġ* Ġ 0 . 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠ Ġlogger . warn (" Error Ġon Ġcalculating Ġof Ġprocessed Bytes PerSecond ") Ċ // ĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġget Est imated Duration (): ĠString Ġ{ ĊĠĠĠĠĠ Ġval Ġseconds Left Ġ= Ġif Ġ( processed Mb PerSecond Ġ> Ġ 0 . 1 ) Ġ(( files Size All Ġ- Ġindexed Files Size . get ()) Ġ/ Ġ 1 _ 0 0 0 _ 0 0 0 Ġ/ Ġprocessed Mb PerSecond ). to Long () Ġelse Ġ- 1 ĊĠĠĠĠĠ Ġif Ġ( seconds Left Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġreturn Ġformat Time ( seconds Left ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġget Duration (): ĠString Ġ{ ĊĠĠĠĠĠ Ġval Ġduration Ġ= Ġ( System . currentTimeMillis () Ġ- Ġtimestamp Millis Begin ) Ġ/ Ġ 1 _ 0 0 0 ĊĠĠĠĠĠ Ġreturn Ġformat Time ( duration ) ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġformat Time ( seconds : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠ Ġfun Ġleft Pad ( n : ĠLong ) Ġ= Ġ( if Ġ( n Ġ< Ġ 1 0 ) Ġ" 0 $ n " Ġelse Ġ"" Ġ+ Ġn ) ĊĠĠĠĠĠ Ġval Ġsec Ġ= Ġseconds Ġ% Ġ 6 0 ĊĠĠĠĠĠ Ġvar Ġmin Ġ= Ġseconds Ġ/ Ġ 6 0 ĊĠĠĠĠĠ Ġval Ġhour Ġ= Ġmin Ġ/ Ġ 6 0 ĊĠĠĠĠĠ Ġmin Ġ% = Ġ 6 0 ĊĠĠĠĠĠ Ġreturn Ġ"$ hour :${ left Pad ( min )} :${ left Pad ( sec )}" ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġfun Ġget Fast Mode Stats (): ĠString Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Global . stat . fast Mode Hit Count . get () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġreturn Ġ( "" Ġ+ Ġ( Global . stat . fast Mode Hit Count . get () Ġ* Ġ 1 0 0 . 0 Ġ/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Global . stat . fast Mode Hit Count . get () Ġ+ ĠGlobal . stat . not Fast Mode Hit Count . get ())). round ToInt ()). left Pad ( 3 ) Ġ+ Ġ"% ĠH its " ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġ" 0 % Ġhits " ĊĠĠ Ġ} Ċ Ċ }