package Ġcom . example . data . worker Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . util . Log Ċ import Ġandroidx . h ilt . work . H ilt Worker Ċ import Ġandroidx . work . Coroutine Worker Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġcom . example . data . db . Image Dao Ċ import Ġcom . example . data . di . Cor outines Module Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġdagger . ass isted . Ass isted Ċ import Ġdagger . ass isted . Ass isted Inject Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjavax . inject . Named Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Save Image Worker " Ċ const Ġval ĠIMAGE _ ID Ġ= Ġ" id " Ċ const Ġval ĠIMAGE _ URL Ġ= Ġ" url " ĊĊ Ċ @ H ilt Worker Ċ internal Ġclass ĠSave Image Worker Ġ@ Ass isted Inject Ġconstructor ( ĊĠĠĠ Ġ@ Ass isted Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġ@ Ass isted Ġprivate Ġval Ġparams : ĠWorker Parameters , ĊĠĠĠ Ġprivate Ġval Ġimage Dao : ĠImage Dao , ĊĠĠĠ Ġ@ Named ( Cor outines Module . IO ) Ġprivate Ġval Ġio Dispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĠCor outine Worker ( context , Ġparams ) Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Work (): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( io Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Id Ġ= Ġparams . input Data . getString ( IMAGE _ ID ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠimageUrl Ġ= Ġparams . input Data . getString ( IMAGE _ URL ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠgetImage Bitmap ( imageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠgetImage File ( image Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrite Result Ġ= Ġwrite Bitmap On File ( bitmap , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( write Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Image FilePath ( image Id , Ġfile . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Couldn 't Ġsave Ġimage ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetImage Bitmap ( url : ĠString ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPic asso . get (). load ( url ). get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetImage File ( id : ĠString ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" image ${ id } image . png " ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( context . files Dir , ĠfileName ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfile ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Bitmap On File ( bitmap : ĠBitmap , Ġfile : ĠFile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfile Out Put Stream : ĠFileOutputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Out Put Stream Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . PNG , Ġ 1 0 0 , Ġfile Out Put Stream ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Out Put Stream ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Image FilePath ( image Id : ĠString , Ġpath : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Dao . update Image Path ( id Ġ= Ġimage Id , Ġpath Ġ= Ġpath ) ĊĠĠĠ Ġ} Ċ Ċ }