package Ġcom . jar vis lin . drug stores . repository Ċ Ċ import Ġcom . github . do y aaaa aken . kotlin csv . dsl . csv Reader Ċ import Ġcom . jar vis lin . domain . entity . Dashboard Ċ import Ġcom . jar vis lin . domain . entity . Content NotFoundException Ċ import Ġcom . jar vis lin . domain . entity . Download Result Ċ import Ġcom . jar vis lin . domain . entity . Header NotFoundException Ċ import Ġcom . jar vis lin . domain . repository . Confirmed Info Repository Ċ import Ġcom . jar vis lin . drug stores . data . remote . Downloader Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjava . io . File Ċ import Ġjava . text . NumberFormat Ċ Ċ class ĠConf irmed Info Repository Impl ( private Ġval Ġdown loader : ĠDown loader ) Ġ: ĠConf irmed Info Repository Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdownload Confirmed Case (): ĠSingle < Download Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdown loader . download ( CSV _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconvert File ( file : ĠFile ): ĠSingle < Dashboard > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcsv Reader (). open ( it ) Ġ{ Ġread All With Header () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġif Ġ( it . isEmpty ()) Ġthrow ĠContent NotFoundException () Ġelse Ġit . first () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . containsKey (" ç¢º è¨ º ") Ġ&& Ġit . containsKey (" éĢģ é© Ĺ ") Ġ&& Ġit . containsKey (" æİĴ éĻ¤ ") Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . containsKey (" æĺ ¨ æĹ¥ æİĴ éĻ¤ ") Ġ&& Ġit . containsKey (" æĺ ¨ æĹ¥ éĢģ é© Ĺ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit . containsKey (" æŃ» äº ¡ ") Ġ&& Ġit . containsKey (" æĺ ¨ æĹ¥ ç¢º è¨ º ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDashboard ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirmed Count Ġ= Ġget Formatted Number ( it [" ç¢º è¨ º "] !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtesting Count Ġ= Ġget Formatted Number ( it [" éĢģ é© Ĺ "] !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexcluded Count Ġ= Ġget Formatted Number ( it [" æİĴ éĻ¤ "] !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyesterday Confirmed Count Ġ= Ġget Formatted Number ( it [" æĺ ¨ æĹ¥ ç¢º è¨ º "] !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyesterday Testing Count Ġ= Ġget Formatted Number ( it [" æĺ ¨ æĹ¥ éĢģ é© Ĺ "] !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyesterday Excluded Count Ġ= Ġget Formatted Number ( it [" æĺ ¨ æĹ¥ æİĴ éĻ¤ "] !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeath Count Ġ= Ġget Formatted Number ( it [" æŃ» äº ¡ "] !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre covered Count Ġ= Ġget Formatted Number ( it [" è§£ éĻ¤ éļĶ éĽ ¢ "]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġthrow ĠHeader NotFoundException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Formatted Number ( text : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ== Ġnull Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . isNumber () Ġ-> ĠNumber Format . getInstance (). format ( text . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠString . isNumber (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . toCharArray (). all Ġ{ Ġit . is Digit () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCSV _ URL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// od . cdc . gov . tw / e ic / covid 1 9 / covid 1 9 _ tw _ stats . csv " ĊĠĠĠ Ġ} Ċ }