package Ġcom . sm k . pub lik . mak ass ar . core . data Ċ Ċ import Ġandroid . net . Uri Ċ import Ġcom . google . android . gms . tasks . On Complete Listener Ċ import Ġcom . google . firebase . storage . Storage Reference Ċ import Ġcom . sm k . pub lik . mak ass ar . core . domain . State Ċ import Ġcom . sm k . pub lik . mak ass ar . core . utils . close Exception Ċ import Ġcom . sm k . pub lik . mak ass ar . core . utils . offer Safe Ċ import Ġcom . sm k . pub lik . mak ass ar . core . utils . offer Safe Close Ċ import Ġjava . io . File Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . channels . await Close Ċ import Ġkotlinx . coroutines . flow . callback Flow Ċ Ċ /* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠDesign ed Ġand Ġdeveloped Ġby ĠJose ph ĠSan j aya , ĠS . T ., ĠM . K om ., ĠAll ĠRights ĠReserved . Ċ Ġ* Ġ@ Github Ġ( https :// github . com / J ose ph San j aya ), Ċ Ġ* Ġ@ Linked In Ġ( https :// www . linkedin . com / in / j ose ph san j aya / )) Ċ Ġ*/ Ċ Ċ class ĠCommon Repository Ġ{ ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġfun Ġupload File ( ref : ĠStorage Reference , Ġfile : ĠFile ) Ġ= Ġcallback Flow < State < Uri >> Ġ{ ĊĠĠĠĠĠĠĠ Ġoffer Safe ( State . Loading ()) ĊĠĠĠĠĠĠĠ Ġval Ġfile Uri Ġ= ĠUri . from File ( file ) ĊĠĠĠĠĠĠĠ Ġval Ġupload Task Ġ= Ġref . put File ( file Uri ) ĊĠĠĠĠĠĠĠ Ġval ĠonComplete Listener Ġ= ĠOn Complete Listener < Uri > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffer Safe Close ( State . Success ( it . result )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Exception ( Throwable (" G agal Ġupload Ġfile ! ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupload Task . continue With Task Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Exception ( Throwable ( task . exception )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref . download Url ĊĠĠĠĠĠĠĠ Ġ}. add On Complete Listener ( onComplete Listener ) ĊĠĠĠĠĠĠĠ Ġawait Close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġfun Ġdelete File ( ref : ĠStorage Reference ) Ġ= Ġcallback Flow < State < Boolean >> Ġ{ ĊĠĠĠĠĠĠĠ Ġoffer Safe ( State . Loading ()) ĊĠĠĠĠĠĠĠ Ġref . delete (). add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffer Safe Close ( State . Success ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Exception ( Throwable (" G agal Ġhap us Ġfile ! ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġawait Close () ĊĠĠĠ Ġ} Ċ } Ċ