package Ġcom . jo h nn y . g ank . di Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . jo h nn y . g ank . network . Date Deserializer Ċ import Ġcom . jo h nn y . g ank . network . G ank Service Ċ import Ġcom . jo h nn y . g ank . model . G ank Api Ċ import Ġcom . jo h nn y . g ank . util . App Util Ċ import Ġokhttp 3 . Cache Ċ import Ġokhttp 3 . Call Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġorg . k oin . dsl . module Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġdescription Ċ Ġ* Ċ Ġ* Ġ@ author ĠJ oh nn y ĠSh ie h Ġ( J oh nn y Sh ie h 1 7 @ gmail . com ) Ċ Ġ* Ġ@ version Ġ 1 . 0 Ċ Ġ* Ċ Ġ* ĠCreated Ġon Ġ 2 0 1 9 - 0 7 - 2 5 Ċ Ġ*/ Ċ val Ġapp Module Ġ= Ġmodule Ġ{ ĊĊĠĠĠ Ġsingle < Call . Factory > Ġ{ Ġokhttp () Ġ} ĊĊĠĠĠ Ġsingle Ġ{ Ġretrofit ( get ()) Ġ} ĊĊĠĠĠ Ġsingle Ġ{ Ġget < Ret rofit >(). create ( G ank Service :: class . java ) Ġ} Ċ } Ċ Ċ private Ġfun Ġretrofit ( call Factory : ĠCall . Factory ) Ġ= ĠRet rofit . Builder () ĊĠĠĠ Ġ. call Factory ( call Factory ) ĊĠĠĠ Ġ. baseUrl ( G ank Api . BASE _ URL ) ĊĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ( date Gson )) ĊĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠ Ġ. build () Ċ Ċ private Ġfun Ġokhttp () Ġ= ĠOk HttpClient . Builder () ĊĠĠĠ Ġ. add Interceptor ( interceptor ) ĊĠĠĠ Ġ. cache ( Cache ( File ( App Util . cache Path , Ġ" http _ re ponse "), Ġ( 1 0 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 ). to Long ())) ĊĠĠĠ Ġ. build () Ċ Ċ private Ġconst Ġval ĠCACHE _ MAX _ AGE Ġ= Ġ 6 0 Ġ* Ġ 6 0 ĠĠ Ġ// Ġone Ġhour Ċ private Ġconst Ġval ĠDATE _ PATTERN 1 Ġ= Ġ" yyyy - MM - dd ' T ' HH : mm : ss . SSSS SS " Ċ private Ġconst Ġval ĠDATE _ PATTERN 2 Ġ= Ġ" yyyy - MM - dd ' T ' HH : mm : ss . SS S ' Z '" Ċ Ċ private Ġval Ġdate Gson : ĠGson ĊĠĠĠ Ġget () Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠ Ġ. register Type Adapter ( Date :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDate Deserializer ( DATE _ PATTERN 1 , ĠDATE _ PATTERN 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. serialize Null s () ĊĠĠĠĠĠĠĠ Ġ. create () Ċ Ċ private Ġval Ġinterceptor : ĠInter ceptor ĊĠĠĠ Ġget () Ġ= ĠInter ceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Cache - Control ", Ġ" max - age =" Ġ+ ĠCACHE _ MAX _ AGE Ġ+ Ġ", Ġmax - st ale =" Ġ+ ĠCACHE _ MAX _ AGE Ġ* Ġ 6 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request . url (). toString (). startsWith ( G ank Api . BASE _ URL ) Ġ&& Ġ! request . url (). toString (). startsWith ( G ank Api . Query _ BASE _ URL )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Interceptor Ġresponse . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Cache - Control ", Ġ" max - st ale =$ CACHE _ MAX _ AGE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresponse ĊĠĠĠ Ġ}