package Ġcom . cogn if ide . gradle . common . build Ċ Ċ import Ġcom . cogn if ide . gradle . common . Common Exception Ċ import Ġcom . cogn if ide . gradle . common . Common Extension Ċ import Ġcom . cogn if ide . gradle . common . utils . Formats Ċ import Ġkotlin . math . max Ċ Ċ class ĠRetry ( val Ġcommon : ĠCommon Extension ) Ġ{ ĊĊĠĠĠ Ġvar Ġtimes Ġ= Ġ 1 L ĊĊĠĠĠ Ġvar Ġdelay : Ġ( Long ) Ġ-> ĠLong Ġ= Ġ{ Ġ 0 L Ġ} ĊĊĠĠĠ Ġfun Ġnever () Ġ{ ĊĠĠĠĠĠĠĠ Ġtimes Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġdelay Ġ= Ġ{ Ġ 0 L Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġafter ( times : ĠLong , Ġdelay : Ġ( Long ) Ġ-> ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . delay Ġ= Ġdelay ĊĠĠĠĠĠĠĠ Ġthis . times Ġ= Ġmax ( 1 , Ġtimes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġafter ( times : ĠLong , Ġdelay : ĠLong ) Ġ= Ġafter ( times ) Ġ{ Ġdelay Ġ} ĊĊĠĠĠ Ġfun Ġafter Second ( times : ĠLong ) Ġ= Ġafter ( times ) Ġ{ ĠSE COND _ M ILL IS Ġ} ĊĊĠĠĠ Ġfun Ġafter Squared Second ( times : ĠLong ) Ġ= Ġafter ( times ) Ġ{ Ġn Ġ-> Ġn Ġ* Ġn Ġ* ĠSE COND _ M ILL IS Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Too Generic Exception Ca ught ") ĊĠĠĠ Ġinline Ġfun Ġ< T , Ġre ified ĠE > Ġwith Count down ( operation : ĠString , Ġblock : Ġ( Long ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġexception : ĠException ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtimes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġno Ġ= Ġi Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġblock ( no ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ! is ĠE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġtimes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ġ= Ġdelay ( no ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon . logger . lifecycle (" Retry ing Ġ($ no /$ times ) Ġ$ operation Ġafter Ġdelay : Ġ${ Formats . duration ( delay )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon . logger . debug (" Retry ing Ġdue Ġto Ġexception ", Ġe ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon . progress Count down Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġdelay ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Prefix Ġ= Ġ" Retry ing Ġ($ no /$ times ) Ġ$ operation Ġafter " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Count down ( operation : ĠString , Ġblock : Ġ( Long ) Ġ-> ĠUnit ) Ġ= Ġwith Count down < Unit , ĠCommon Exception >( operation , Ġblock ) ĊĊĠĠĠ Ġ@ Suppress (" Too Generic Exception Ca ught ") ĊĠĠĠ Ġinline Ġfun Ġ< T , Ġre ified ĠE > Ġwith Sleep ( block : Ġ( Long ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġexception : ĠException ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtimes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġno Ġ= Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġblock ( no ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ! is ĠE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġtimes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ġ= Ġdelay ( no ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( delay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Sleep ( block : Ġ( Long ) Ġ-> ĠUnit ) Ġ= Ġwith Sleep < Unit , ĠCommon Exception >( block ) ĊĊĠĠĠ Ġfun Ġwith Sleep T ill End ( block : Ġ( Long ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtimes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġno Ġ= Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( no ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġtimes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Ġ= Ġdelay ( no ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( delay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSE COND _ M ILL IS Ġ= Ġ 1 0 0 0 L ĊĠĠĠ Ġ} Ċ } Ċ