package Ġcom . code path . apps . rest client template . models Ċ import Ġandroid . os . Parcelable Ċ import Ġandroidx . room . Entity ; Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . room . Column Info Ċ import Ġandroidx . room . PrimaryKey Ċ import Ġkotlinx . parcel ize . Parcel ize Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ import Ġjava . lang . Long . MAX _ VALUE Ċ import Ġkotlin . collections . ArrayList Ċ Ċ var Ġmax _ id Ġ= ĠMAX _ VALUE Ċ Ċ @ Parcel ize Ċ @ Entity Ċ data Ġclass ĠTweet ( ĊĠĠĠ Ġ@ Column Info ĊĠĠĠ Ġvar Ġbody : ĠString , ĊĠĠĠ Ġ@ Column Info ĊĠĠĠ Ġvar ĠcreatedAt : ĠString , ĊĠĠĠ Ġ@ Column Info ĊĠĠĠ Ġvar Ġuser : ĠUser ?, ĊĠĠĠ Ġ@ Column Info ĊĠĠĠ Ġ@ PrimaryKey ĊĠĠĠ Ġvar Ġid : ĠLong , ĊĠĠĠ Ġ@ Column Info ĊĠĠĠ Ġvar Ġreply Count : ĠInt , ĊĠĠĠ Ġ@ Column Info ĊĠĠĠ Ġvar Ġret weet Count : ĠInt , ĊĠĠĠ Ġ@ Column Info ĊĠĠĠ Ġvar Ġfavorite Count : ĠInt , Ċ ) Ġ: ĠParcel able Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( jsonObject : ĠJSONObject , Ġuser Array : ĠJSONArray ) Ġ: ĠTweet Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpublic Matrix Ġ= ĠjsonObject . getJSONObject (" public _ metrics ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠjsonObject . getString (" text ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcreatedAt Ġ= Ġget Formatted Timestamp ( jsonObject . getString (" created _ at ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor _ id Ġ= ĠjsonObject . getLong (" author _ id ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġmap User ( user Array , Ġauthor _ id )?. let Ġ{ ĠUser . fromJson ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠjsonObject . getLong (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreply Count Ġ= Ġpublic Matrix . getInt (" reply _ count ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret weet Count Ġ= Ġpublic Matrix . getInt (" ret weet _ count ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfavorite Count Ġ= Ġpublic Matrix . getInt (" like _ count ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ< Ġmax _ id ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax _ id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTweet ( body , ĠcreatedAt , Ġuser , Ġid , Ġreply Count , Ġret weet Count , Ġfavorite Count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmap User ( user Array : ĠJSONArray , Ġauthor Id : ĠLong ): ĠJSONObject ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠjsonObject : ĠJSONObject ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġuser Array . length ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user Array . getJSONObject ( i ). getLong (" id "). equals ( author Id )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠjsonObject Ġ= Ġ Ġuser Array . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠjsonObject ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom JsonArray ( jsonObject : ĠJSONObject ): ĠList < Tweet > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtweets Ġ= ĠArrayList < Tweet >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtweet Array Ġ= ĠjsonObject . get JSONArray (" data ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Array Ġ= ĠjsonObject . getJSONObject (" includes "). get JSONArray (" users ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ Ġtweet Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweets . add ( fromJson ( tweet Array . getJSONObject ( i ), Ġuser Array )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtweets ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Formatted Timestamp ( string : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTime Formatter . getTime Difference ( string ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }