package Ġuk . co . sentinel web . c uer . app . db . repository Ċ Ċ import Ġandroidx . room . Transaction Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġuk . co . sentinel web . c uer . app . db . App Database Ċ import Ġuk . co . sentinel web . c uer . app . db . dao . Media Dao Ċ import Ġuk . co . sentinel web . c uer . app . db . entity . update . Media Update Mapper Ċ import Ġuk . co . sentinel web . c uer . app . db . mapper . Media Mapper Ċ import Ġuk . co . sentinel web . c uer . app . db . repository . Repo Result . Data Ċ import Ġuk . co . sentinel web . c uer . app . db . repository . Repo Result . Data . Empty Ċ import Ġuk . co . sentinel web . c uer . app . orche strator . Orche strator Contract .* Ċ import Ġuk . co . sentinel web . c uer . app . orche strator . Orche strator Contract . Operation .* Ċ import Ġuk . co . sentinel web . c uer . core . providers . Coroutine Context Provider Ċ import Ġuk . co . sentinel web . c uer . core . wrapper . Log Wrapper Ċ import Ġuk . co . sentinel web . c uer . domain . Media Domain Ċ import Ġuk . co . sentinel web . c uer . domain . update . Media Position Update Domain Ċ import Ġuk . co . sentinel web . c uer . domain . update . Media Update Domain Ċ import Ġuk . co . sentinel web . c uer . domain . update . Update Domain Ċ import Ġjava . io . Invalid Class Exception Ċ Ċ // Ġtodo Ġemit Ċ @ Suppress (" DE PREC ATION ") Ċ class ĠRoom Media Database Repository Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmedia Dao : ĠMedia Dao , ĊĠĠĠ Ġprivate Ġval Ġmedia Mapper : ĠMedia Mapper , ĊĠĠĠ Ġprivate Ġval Ġchannel Database Repository : ĠRoom Channel Database Repository , ĊĠĠĠ Ġprivate Ġval Ġco Provider : ĠCor outine Context Provider , ĊĠĠĠ Ġprivate Ġval Ġlog : ĠLog Wrapper , ĊĠĠĠ Ġprivate Ġval Ġdatabase : ĠApp Database , ĊĠĠĠ Ġprivate Ġval Ġmedia Update Mapper : ĠMedia Update Mapper , Ċ ) Ġ: ĠMedia Database Repository Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . tag ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ media Flow Ġ= ĠMutable Shared Flow < Pair < Operation , ĠMedia Domain >>() ĊĠĠĠ Ġoverride Ġval Ġupdates : ĠFlow < Pair < Operation , ĠMedia Domain >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ media Flow ĊĊĠĠĠ Ġoverride Ġval Ġstats : ĠFlow < Pair < Operation , ĠNothing >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠTODO (" Not Ġyet Ġimplemented ") ĊĊĠĠĠ Ġ@ Transaction ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsave ( domain : ĠMedia Domain , Ġflat : ĠBoolean , Ġemit : ĠBoolean ): ĠRepo Result < Media Domain > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( co Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ(! flat ) Ġit . copy ( channel Data Ġ= Ġchannel Database Repository . check To Save Channel ( it . channel Data )) Ġelse Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġmedia Mapper . map ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġmedia Dao . insert ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠData ( load ( id Ġ= Ġit , Ġflat ). data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġif Ġ( emit ) Ġit . data ?. also Ġ{ Ġ_ media Flow . emit (( if Ġ( flat ) ĠFL AT Ġelse ĠFULL ) Ġto Ġit ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" co ul dn 't Ġsave Ġ${ domain . url }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( msg , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Result . Error < Media Domain >( e , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsave ( domains : ĠList < Media Domain >, Ġflat : ĠBoolean , Ġemit : ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠRepo Result < List < Media Domain >> Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( co Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ġ// Ġtodo Ġbetter Ġtransactions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomains ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġdatabase . beginTransaction () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġif Ġ(! flat ) Ġit . copy ( channel Data Ġ= Ġchannel Database Repository . check To Save Channel ( it . channel Data )) Ġelse Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmedia Mapper . map ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġmedia Dao . insert All ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġdatabase . set Transaction Successful () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġdatabase . end Transaction () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġid list Ġ-> ĠData ( load List ( IdList Filter ( id list ), Ġflat ). data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġif Ġ( emit ) Ġit . data ?. forEach Ġ{ Ġ_ media Flow . emit (( if Ġ( flat ) ĠFL AT Ġelse ĠFULL ) Ġto Ġit ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" Couldn 't Ġsave Ġ${ domains . map Ġ{ Ġit . url Ġ}}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( msg , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . end Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Result . Error < List < Media Domain >>( e , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( id : ĠLong , Ġflat : ĠBoolean ): ĠRepo Result < Media Domain > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( co Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Dao . load ( id ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġmedia Mapper . map ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠData ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" co ul dn 't Ġload Ġ$ id " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( msg , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Result . Error < Media Domain >( e , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload List ( filter : ĠFilter ?, Ġflat : ĠBoolean ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠRepo Result < List < Media Domain >> Ġ= Ġwith Context ( co Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{// Ġtodo Ġbetter Ġtransactions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( filter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠId List Filter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Dao ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load All ById s ( filter . ids . to Long Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmedia Mapper . map ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠData ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlatform IdList Filter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . ids ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġmedia Dao . findBy Media Id ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmedia Mapper . map ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠData . data OrEmpty ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChannel Platform Id Filter Ġ-> ĠTODO () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException ("$ filter Ġnot Ġimplemented ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> // Ġtodo Ġreturn Ġempty Ġfor Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Dao Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAll () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmedia Mapper . map ( it ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠData ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġdatabase . set Transaction Successful () Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ}}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" co ul dn 't Ġload Ġ$ filter " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( msg , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Result . Error < List < Media Domain >>( e , Ġmsg ) ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġdatabase . end Transaction () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Stats List ( filter : ĠFilter ?): ĠRepo Result < List < Nothing >> Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete ( domain : ĠMedia Domain , Ġemit : ĠBoolean ): ĠRepo Result < Boolean > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( co Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġmedia Mapper . map ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġmedia Dao . delete ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġif Ġ( emit ) Ġ_ media Flow . emit ( DELETE Ġto Ġdomain ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" co ul dn 't Ġdelete Ġ${ domain . id }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( msg , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Result . Error < Boolean >( e , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete All (): ĠRepo Result < Boolean > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( co Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Dao ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġdatabase . beginTransaction () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġdatabase . set Transaction Successful () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" co ul dn 't Ġdelete Ġall Ġmedia " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( msg , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Result . Error < Boolean >( e , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġdatabase . end Transaction () Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcount ( filter : ĠFilter ?): ĠRepo Result < Int > Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( co Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Dao . count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĠData ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" co ul dn 't Ġcount Ġ${ filter }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( msg , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Result . Error < Int >( e , Ġmsg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate ( update : ĠUpdate Domain < Media Domain >, Ġflat : ĠBoolean , Ġemit : ĠBoolean ): ĠRepo Result < Media Domain > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( co Provider . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( update Ġas ? ĠMedia Update Domain ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMedia Position Update Domain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( update Ġas ĠMedia Position Update Domain ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. apply Ġ{ Ġdatabase . beginTransaction () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit Ġto Ġmedia Dao . get Flags ( it . id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġmedia Update Mapper . map ( it . first , Ġit . second ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġmedia Dao . update Position ( it . id , Ġit . date Last Play ed , Ġit . posit on , Ġit . duration , Ġit . flags ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġdatabase . set Transaction Successful () Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġdatabase . end Transaction () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠData ( load ( id Ġ= Ġit . id , Ġflat ). data ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġlog . d (" media : Ġ${ it . data ?. date Last Play ed }") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġif Ġ( emit ) Ġit . data ?. also Ġ{ Ġ_ media Flow . emit (( if Ġ( flat ) ĠFL AT Ġelse ĠFULL ) Ġto Ġit ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠInvalid Class Exception (" update Ġobject Ġnot Ġvalid : Ġ${ update :: class . simple Name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ" co ul dn 't Ġdelete Ġall Ġchannels " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . e ( msg , Ġe ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . end Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Result . Error < Media Domain >( e , Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ