package Ġdk . yout ec . d rapi Ċ Ċ import Ġokhttp 3 . Cache Control Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Response Ċ import Ġjava . io . IOException Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . days Ċ Ċ @ Opt In ( Experimental Time :: class ) Ċ open Ġclass ĠSt ale If Error Interceptor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstale Duration : ĠDuration Ġ= Ġ 2 8 . days Ċ ) Ġ: ĠInter ceptor Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠResponse ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġoriginal Exception : ĠException ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġchain . proceed ( request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOriginal Ġrequest Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Exception Ġ= Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response Ġ== Ġnull Ġ|| Ġ! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Control Ġ= ĠCache Control . Builder (). only If Cached () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max St ale ( st ale Duration . in Milliseconds . toInt (), ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Request Ġ= Ġrequest . newBuilder (). cache Control ( cache Control ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstale Response Ġ= Ġchain . proceed ( new Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( st ale Response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstale Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCache Ġnot Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse Ġ?: Ġthrow Ġoriginal Exception Ġ?: Ġthrow ĠIOException () ĊĠĠĠ Ġ} Ċ }