package Ġcom . dan ik ula . vide oc ache kt Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . webkit . MimeType Map Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . Closeable Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Unsupported EncodingException Ċ import Ġjava . lang . IllegalStateException Ċ import Ġjava . lang . RuntimeException Ċ import Ġjava . net . URL Decoder Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . security . Message Digest Ċ import Ġjava . security . NoSuch AlgorithmException Ċ Ċ /** Ċ Ġ* ĠJust Ġsimple Ġutils . Ċ Ġ* Ċ Ġ* ĠCreate Ġtime : Ġ 2 0 2 1 / 8 / 9 . Ċ Ġ*/ Ċ object ĠProxy Cache Utils Ġ{ ĊĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLoggerFactory . getLogger (" Proxy Cache Utils ") ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ BUFFER _ SIZE Ġ= Ġ 8 Ġ* Ġ 1 0 2 4 ĊĠĠĠ Ġconst Ġval ĠMAX _ ARRAY _ PRE VIEW Ġ= Ġ 1 6 ĊĊĠĠĠ Ġfun Ġget Sup pos ably Mime ( url : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmime s Ġ= ĠMime TypeMap . get Singleton () ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= ĠMime TypeMap . getFile Extension From Url ( url ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( TextUtils . isEmpty ( extension )) Ġnull Ġelse Ġmime s . get MimeType From Extension ( extension ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġassert Buffer ( buffer : ĠByteArray , Ġoffset : ĠLong , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( offset Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Data Ġoffset Ġmust Ġbe Ġpositive !" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( length Ġ>= Ġ 0 Ġ&& Ġlength Ġ<= Ġbuffer . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Length Ġmust Ġbe Ġin Ġrange Ġ[ 0 .. buffer . length ]" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpreview ( data : ĠByteArray , Ġlength : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreview Length Ġ= Ġlength . coerce At Least ( 0 ). coerce At Most ( MAX _ ARRAY _ PRE VIEW ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Range Ġ= Ġdata . copyOf Range ( 0 , Ġpreview Length ) ĊĠĠĠĠĠĠĠ Ġvar Ġpreview Ġ= Ġdata Range . content ToString () ĊĠĠĠĠĠĠĠ Ġif Ġ( preview Length Ġ< Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Ġ= Ġpreview . substring ( 0 , Ġpreview . length Ġ- Ġ 1 ) Ġ+ Ġ", Ġ... ]" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpreview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġencode ( url : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠURL Encoder . encode ( url , Ġ" utf - 8 ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnsupported EncodingException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Error Ġencoding Ġurl ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdecode ( url : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠURL Decoder . decode ( url , Ġ" utf - 8 ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnsupported EncodingException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Error Ġdecoding Ġurl ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠClose able . try Close () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" Error Ġclosing Ġresource ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompute MD 5 ( string : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Digest Ġ= ĠMessage Digest . getInstance (" MD 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Digest . digest ( string . toByteArray ()). to HexString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠByteArray . to HexString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( String . format ("% 0 2 x ", Ġb )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} Ċ }