package Ġcom . j ason adam . twitter apic aller . external API Ċ Ċ import Ġcom . j ason adam . twitter apic aller . models . Bearer Token Ċ import Ġcom . j ason adam . twitter apic aller . models . Search Values Ċ import Ġcom . j ason adam . twitter apic aller . models . Tweet Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . util . concurrent . Concurrent Linked Queue Ċ import Ġjava . util . logging . Logger Ċ Ċ class ĠT weets View ( ĊĠĠĠ Ġprivate Ġval Ġsearch Values : ĠSearch Values , ĊĠĠĠ Ġprivate Ġval Ġbe arer Token : ĠBearer Token Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtwitter API : ĠTwitter API Ġ= ĠWeb Client Module . twitter API ĊĠĠĠ Ġval Ġtweets Ġ= ĠConcurrent Linked Queue < Tweet >() ĊĊĠĠĠ Ġsuspend Ġfun Ġget Search T weets And Save () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Values . sear ches . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Search T weets ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Search T weets ( query : ĠString , Ġmax Id : ĠLong ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġget Search T weets Response Ġ= Ġtwitter API . get Search T weets ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthorization Ġ= Ġ" Bearer Ġ${ bearer Token . accessToken }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Id Ġ= Ġmax Id ĊĠĠĠĠĠĠĠ Ġ). execute () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( get Search T weets Response . is Successful Ġ&& Ġ! get Search T weets Response . body ()?. statuses . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch T weets Response Ġ= Ġget Search T weets Response . body () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweets . addAll ( search T weets Response . statuses ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Max Id : ĠLong Ġ= Ġsearch T weets Response . statuses . map Ġ{ Ġit . id Ġ}. min OrNull () !!. minus ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Search T weets ( query , Ġnew Max Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" finished Ġpulling Ġtweets Ġfor Ġquery : Ġ{ Ġ$ query Ġ} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetUser Timeline T weets And Save () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Values . from Accounts !!. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Timeline T weets ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. await All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetUser Timeline T weets ( user : ĠString , Ġmax Id : ĠLong ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠgetUser Timeline Response Ġ= Ġtwitter API . getUser Timeline ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthorization Ġ= Ġ" Bearer Ġ${ bearer Token . accessToken }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreen Name Ġ= Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Id Ġ= Ġmax Id ĊĠĠĠĠĠĠĠ Ġ). execute () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( getUser Timeline Response . is Successful Ġ&& Ġ! getUser Timeline Response . body (). isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Timeline Response Ġ= ĠgetUser Timeline Response . body () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweets . addAll ( user Timeline Response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Max Id : ĠLong Ġ= Ġuser Timeline Response . map Ġ{ Ġit . id Ġ}. min OrNull () !!. minus ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Timeline T weets ( user , Ġnew Max Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" finished Ġpulling Ġtweets Ġfor Ġuser : Ġ$ user ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog : ĠLogger Ġ= ĠLogger . getLogger ( this :: class . java . simple Name ) ĊĠĠĠ Ġ} Ċ } Ċ