package Ġbg . dab ul g aria . t ib ro ish . persistence . remote . api Ċ Ċ import Ġbg . dab ul g aria . t ib ro ish . persistence . remote . ApiException Ċ import Ġbg . dab ul g aria . t ib ro ish . persistence . remote . Auth Exception Ċ import Ġcom . android . vol ley . toolbox . Http Header Parser Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Response Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . Unsupported EncodingException Ċ import Ġjava . lang . StringBuilder Ċ Ċ class ĠApi Interceptor Ġ( private Ġval Ġuser Agent : ĠString ) Ġ: ĠInter ceptor Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġoriginal Ġ= Ġchain . request () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCustom ize Ġthe Ġrequest ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġoriginal . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( Api Header . Accept Encoding , Ġ" gzip ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( Api Header . ContentType , Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( Api Header . UserAgent , Ġuser Agent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= response . is Successful ĊĠĠĠĠĠĠĠ Ġif Ġ(! success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Error ( response ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion Ġparse ĠAPI Ġerror ĊĠĠĠ Ġprivate Ġfun Ġthrow Error ( response : ĠResponse ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Response Ġ= Ġresponse . network Response ĊĠĠĠĠĠĠĠ Ġval Ġnetwork ResponseBody Ġ= Ġresponse . body ĊĠĠĠĠĠĠĠ Ġvar Ġresponse Data : ĠString Ġ= "" ĊĠĠĠĠĠĠĠ Ġif Ġ( network Response Ġ!= Ġnull Ġ&& Ġnetwork ResponseBody Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheaders Map Map Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Response . headers . names (). map Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Map Map . put ( name , Ġnetwork Response . headers . get ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Data Ġ= ĠString ( network ResponseBody . bytes (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharset ( Http Header Parser . parse Charset ( headers Map Map , ĠChar sets . UTF _ 8 . name ()))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnsupported EncodingException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= network Response ?. code Ġ?: Ġ 5 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠString ? Ġ= ĠgetMessage OrNull ( response Data ) ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġif ( code Ġ== ĠU NA UTH ORIZ ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Exception ( response , Ġresponse Data , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApiException ( response , Ġresponse Data , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetMessage OrNull ( response Data : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmessage : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJSONObject ( response Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠgetMessage FromJson Array ( jsonObject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠjsonObject . getString (" message ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetMessage FromJson Array ( jsonObject : ĠJSONObject ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Array : ĠJSONArray ? ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Array Ġ= ĠjsonObject . get JSONArray (" message ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( json Array . length () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġjson Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( remove Quotes FromString Start And End ( json Array . getString ( i ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġjson Array . length ()- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Quotes FromString Start And End ( string : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstring . replace ( Regex ("^ \" + | \" +$ "), Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject { ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠU NA UTH ORIZ ED Ġ= Ġ 4 0 1 ĊĠĠĠ Ġ} Ċ }