package Ġjp . j ug g ler . sub way to oter . api čĊč Ċ import Ġjp . j ug g ler . sub way to oter . util . Decode Options č Ċ import Ġjp . j ug g ler . util .* č Ċ import Ġokhttp 3 . Response č Ċ import Ġokhttp 3 . WebSocket čĊč Ċ open Ġclass ĠT oot Api Result ( čĊĠĠĠ Ġ@ Suppress (" unused ") Ġval Ġdummy : ĠInt Ġ= Ġ 0 , čĊĠĠĠ Ġvar Ġerror : ĠString ? Ġ= Ġnull , čĊĠĠĠ Ġvar Ġresponse : ĠResponse ? Ġ= Ġnull , čĊĠĠĠ Ġvar Ġcaption : ĠString Ġ= Ġ" ?", čĊĠĠĠ Ġvar Ġbody String : ĠString ? Ġ= Ġnull , č Ċ ) Ġ{ čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLog Category (" To ot Api Result ") čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġre WhiteSpace Ġ= Ġ""" \ s + """. ascii Pattern () čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġre Link URL Ġ= Ġ""" < ([^ > ]+) >; \ s * rel =" ([^ "] +) """" . ascii Pattern () čĊčĊĠĠĠĠĠĠĠ Ġfun Ġmake With Caption ( caption : ĠString ?): ĠT oot Api Result Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠT oot Api Result () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( caption ?. isEmpty () Ġ!= Ġfalse ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e (" make With Caption : Ġmissing Ġcaption !") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error Ġ= Ġ" missing Ġinstance Ġname " čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . caption Ġ= Ġcaption čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġvar Ġrequest Info Ġ= Ġ"" čĊčĊĠĠĠ Ġvar Ġtoken Info : ĠJsonObject ? Ġ= Ġnull čĊčĊĠĠĠ Ġvar Ġdata : ĠAny ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠJson Array ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Link Header ( response , Ġvalue ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġval ĠjsonObject : ĠJsonObject ? čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Ġas ? ĠJsonObject čĊčĊĠĠĠ Ġval Ġjson Array : ĠJson Array ? čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Ġas ? ĠJson Array čĊčĊĠĠĠ Ġval Ġstring : ĠString ? čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Ġas ? ĠString čĊčĊĠĠĠ Ġvar Ġlink Ol der : ĠString ? Ġ= Ġnull Ġ// ĠãĤ Ī ãĤĬ åı¤ ãģĦ ãĥĩãĥ¼ãĤ¿ ãģ¸ãģ® ãĥª ãĥ³ ãĤ¯ čĊĠĠĠ Ġvar Ġlink New er : ĠString ? Ġ= Ġnull Ġ// ĠãĤ Ī ãĤĬ æĸ°ãģĹãģĦ ãĥĩãĥ¼ãĤ¿ ãģ¸ãģ® čĊčĊĠĠĠ Ġconstructor () Ġ: Ġthis ( 0 ) čĊčĊĠĠĠ Ġconstructor ( error : ĠString ) Ġ: Ġthis ( 0 , Ġerror Ġ= Ġerror ) čĊčĊĠĠĠ Ġconstructor ( socket : ĠWebSocket ) Ġ: Ġthis ( 0 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . data Ġ= Ġsocket čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġconstructor ( response : ĠResponse , Ġerror : ĠString ) čĊĠĠĠĠĠĠĠ Ġ: Ġthis ( 0 , Ġerror , Ġresponse ) čĊčĊĠĠĠ Ġconstructor ( response : ĠResponse , Ġbody String : ĠString , Ġdata : ĠAny ?) Ġ: Ġthis ( čĊĠĠĠĠĠĠĠĠ 0 , čĊĠĠĠĠĠĠĠ Ġresponse Ġ= Ġresponse , čĊĠĠĠĠĠĠĠ Ġbody String Ġ= Ġbody String čĊĠĠĠ Ġ) Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . data Ġ= Ġdata čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// Ġreturn Ġresult . setError (...) Ġãģ¨ æĽ¸ ãģį ãģŁ ãģĦ čĊĠĠĠ Ġfun ĠsetError ( error : ĠString ): ĠT oot Api Result Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . error Ġ= Ġerror čĊĠĠĠĠĠĠĠ Ġreturn Ġthis čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġparse Link Header ( response : ĠResponse ?, Ġarray : ĠJson Array ) Ġ{ čĊĠĠĠĠĠĠĠ Ġresponse Ġ?: Ġreturn čĊčĊĠĠĠĠĠĠĠ Ġlog . d (" array Ġsize =${ array . size }") čĊčĊĠĠĠĠĠĠĠ Ġval Ġsv Ġ= Ġresponse . header (" Link ") čĊĠĠĠĠĠĠĠ Ġif Ġ( sv Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . d (" missing ĠLink Ġheader ") čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLink : Ġ Ġ< https :// mast od on . j ug g ler . jp / api / v 1 / time lines / home ? limit = XX & max _ id = 4 0 5 2 2 8 >; Ġrel =" next ", čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ< https :// mast od on . j ug g ler . jp / api / v 1 / time lines / home ? limit = XX & since _ id = 4 3 6 9 4 6 >; Ġrel =" prev " čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġre Link URL . matcher ( sv ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( m . find ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġm . group Ex ( 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrel Ġ= Ġm . group Ex ( 2 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĉ warning . d (" Link Ġ% s ,% s ", rel , url ); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" next " Ġ== Ġrel ) Ġlink Ol der Ġ= Ġurl čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" prev " Ġ== Ġrel ) Ġlink New er Ġ= Ġurl čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// ĠãĤ¢ ãĤ«ãĤ¦ãĥ³ãĥĪ ä½ľæĪĲ API ãģ® details ãĤĴ èªŃ ãĤĢ ãģŁãĤģ ãĢģ ãĤ¨ãĥ© ãĥ¼ å¿ľ çŃĶ ãģ® json ãĤª ãĥĸãĤ¸ãĤ§ãĤ¯ãĥĪ ãĤĴ ä¿ĿæĮģ ãģĻãĤĭ čĊĠĠĠ Ġprivate Ġvar Ġerror Json : ĠJsonObject ? Ġ= Ġnull čĊčĊĠĠĠ Ġinternal Ġfun Ġsimplify Error Html ( čĊĠĠĠĠĠĠĠ Ġsv : ĠString , čĊĠĠĠĠĠĠĠ Ġjson Error Parser : Ġ( json : ĠJsonObject ) Ġ-> ĠString ? Ġ= ĠT oot ApiClient . DEFAULT _ JSON _ ERROR _ PARSER , čĊĠĠĠ Ġ): ĠString Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġthis . response !! čĊčĊĠĠĠĠĠĠĠ Ġ// ĠJsonObject ãģ¨ãģĹãģ¦ è§£ éĩ Ī ãģ§ãģįãĤĭ ãģª ãĤī ãĤ¨ãĥ© ãĥ¼ãĥ ¡ ãĥĥãĤ»ãĥ¼ãĤ¸ ãĤĴ æ¤ľ åĩº ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġsv . decode JsonObject () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . error Json Ġ= Ġjson čĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Error Parser ( json )?. not Empty ()?. let Ġ{ Ġreturn Ġit Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠHTML ãģª ãĤī ãĤ¿ ãĤ° ãģ® éĻ¤ åİ» ãĤĴ è© ¦ ãģ¿ ãĤĭ čĊĠĠĠĠĠĠĠ Ġval Ġct Ġ= Ġresponse . body ?. contentType () čĊĠĠĠĠĠĠĠ Ġif Ġ( ct ?. subtype Ġ== Ġ" html ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecoded Ġ= ĠDecode Options (). decode HTML ( sv ). toString () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġre WhiteSpace . matcher ( decoded ). replaceAll (" Ġ"). trim () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠXXX : ĠAmazon ĠS 3 ĠãģĮ 4 0 3 ãĤĴ è¿Ķ ãģĹãģŁ åł´åĲĪ ãģ« content - type ãģĮ ? / xml ãģ§ server ãģĮ Amazon ãģª ãĤī XML ãĤĴ ãĥĳ ãĥ¼ãĤ¹ ãģĹãģ¦ ãĤ¨ãĥ© ãĥ¼ãĤĴ æķ´ å½¢ ãģĻãĤĭãģĵãģ¨ ãĤĤ ãģ§ãģįãĤĭ ãģĮ ãĢģ å¤ļ åĪĨ å¿ħè¦ģ ãģªãģĦ čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġre WhiteSpace . matcher ( sv ). replaceAll (" Ġ"). trim () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġparse ErrorResponse ( čĊĠĠĠĠĠĠĠ Ġbody String : ĠString ? Ġ= Ġnull , čĊĠĠĠĠĠĠĠ Ġjson Error Parser : Ġ( json : ĠJsonObject ) Ġ-> ĠString ? Ġ= ĠT oot ApiClient . DEFAULT _ JSON _ ERROR _ PARSER , čĊĠĠĠ Ġ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġthis . response !! čĊčĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbody Ġãģ¯ æĹ¢ ãģ« èªŃãģ¿ çµĤ ãĤı ãģ£ ãģ¦ãģĦãĤĭ ãģĭ ãĢģ ãģĿ ãģĨ ãģ§ ãģª ãģĳ ãĤĮãģ° ãģĵãĤĮ ãģĭãĤī èªŃ ãĤĢ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body String Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( simplify Error Html ( body String , Ġjson Error Parser )) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġresponse . body ?. string () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( string Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( simplify Error Html ( string , Ġjson Error Parser )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( ex , Ġ" missing Ġresponse Ġbody .") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("( missing Ġresponse Ġbody )") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sb . isNotEmpty ()) Ġsb . append (' Ġ') čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("( HTTP Ġ"). append ( response . code . toString ()) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġresponse . message čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message . isNotEmpty ()) Ġsb . append (' Ġ'). append ( message ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" )") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( caption . isNotEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (' Ġ'). append ( caption ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠThrowable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . trace ( ex ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġthis . error Ġ= Ġsb . toString (). replace ("\ n +". to Regex (), Ġ"\ n ") čĊĠĠĠ Ġ} č Ċ } čĊ