package Ġcom . kir ak ish ou . photo exchange . use cases Ċ Ċ import Ġcom . kir ak ish ou . photo exchange . helper . api . ApiClient Ċ import Ġcom . kir ak ish ou . photo exchange . helper . concurrency . coroutines . Dispatch ers Provider Ċ import Ġcom . kir ak ish ou . photo exchange . helper . database . repository . Settings Repository Ċ import Ġcom . kir ak ish ou . photo exchange . helper . database . source . remote . Firebase Remote Source Ċ import Ġcom . kir ak ish ou . photo exchange . helper . exception . Api ErrorException Ċ import Ġcom . kir ak ish ou . photo exchange . helper . exception . Database Exception Ċ import Ġcom . kir ak ish ou . photo exchange . helper . exception . Firebase Exception Ċ import Ġcom . kir ak ish ou . photo exchange . helper . exception . Network Access Disabled In Settings Ċ import Ġcom . kir ak ish ou . photo exchange . helper . util . Net Utils Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġtim ber . log . Tim ber Ċ Ċ open Ġclass ĠUpdate Firebase Token UseCase ( ĊĠ Ġprivate Ġval ĠapiClient : ĠApi Client , ĊĠ Ġprivate Ġval Ġnet Utils : ĠNet Utils , ĊĠ Ġprivate Ġval Ġsettings Repository : ĠSettings Repository , ĊĠ Ġprivate Ġval Ġfirebase Remote Source : ĠFirebase Remote Source , ĊĠ Ġdispatch ers Provider : ĠDispatch ers Provider Ċ ) Ġ: ĠBase UseCase ( dispatch ers Provider ) Ġ{ ĊĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Update Firebase Token UseCase " ĊĊĠ Ġopen Ġsuspend Ġfun Ġupdate Firebase Token If Ne cessary () Ġ{ ĊĠĠĠ Ġreturn Ġwith Context ( coroutine Context ) Ġ{ ĊĠĠĠĠĠ Ġval Ġnew Token Ġ= Ġsettings Repository . getNew Firebase Token () ĊĠĠĠĠĠ Ġval Ġregular Token Ġ= Ġsettings Repository . get Firebase Token () ĊĊĠĠĠĠĠ Ġ// both Ġtokens Ġmust Ġbe Ġnot Ġempty , Ġnew Ġtoken Ġmust Ġbe Ġequal Ġto Ġregular Ġtoken ĊĠĠĠĠĠ Ġ// otherwise Ġwe Ġneed Ġto Ġupdate Ġtoken ĊĠĠĠĠĠ Ġif Ġ( new Token . isNotEmpty () Ġ&& Ġregular Token . isNotEmpty () Ġ&& Ġnew Token Ġ== Ġregular Token ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d (" Token Ġis ĠOK ") ĊĠĠĠĠĠĠĠ Ġreturn @ with Context ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ(! net Utils . can Access Network ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNetwork Access Disabled In Settings () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn @ with Context Ġupdate Firebase Token Internal () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġsuspend Ġfun Ġupdate Firebase Token Internal () Ġ{ ĊĠĠĠ Ġ// always Ġretrieve Ġfresh Ġtoken Ġfrom Ġthe Ġfirebase Ġinstead Ġof Ġreading Ġit Ġfrom Ġthe Ġdatabase ĊĠĠĠ Ġval Ġfresh Token Ġ= Ġtry Ġ{ ĊĠĠĠĠĠ Ġfirebase Remote Source . getToken Async () ĊĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ ĠTim ber . tag ( TAG ). e ( error , Ġ" Error Ġwhile Ġtrying Ġto Ġget Ġfirebase Ġtoken ") ĊĠĠĠĠĠ Ġthrow ĠFirebase Exception ( error . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( fresh Token . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠFirebase Exception (" Token Ġis Ġempty !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// update Ġboth Ġthe Ġregular Ġfirebase Ġtoken Ġand Ġthe Ġnew Ġone Ġsince Ġwe Ġhave Ġjust Ġretrieved ĊĠĠĠ Ġ// the Ġlatest Ġtoken Ġdirectly Ġfrom Ġthe Ġfirebase ĊĠĠĠ Ġif Ġ(! settings Repository . save Firebase Token ( fresh Token )) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠDatabase Exception (" Could Ġnot Ġupdate Ġfirebase Ġfirebase Ġtoken ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! settings Repository . save New Firebase Token ( fresh Token )) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠDatabase Exception (" Could Ġnot Ġupdate Ġnew Ġfirebase Ġfirebase Ġtoken ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġuser Uuid Ġ= Ġsettings Repository . getUser Uuid () ĊĠĠĠ Ġif Ġ( user Uuid . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠDatabase Exception (" Cannot Ġupdate Ġfirebase Ġbecause Ġuser Uuid Ġis Ġempty !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠapiClient . update Firebase Token ( user Uuid , Ġfresh Token ) ĊĠĠĠ Ġ} Ġcatch Ġ( error : ĠApi ErrorException ) Ġ{ ĊĠĠĠĠĠ ĠTim ber . tag ( TAG ). e ( error , Ġ" Error Ġwhile Ġtrying Ġto Ġupdate Ġfirebase Ġtoken ") ĊĊĠĠĠĠĠ Ġ// reset Ġboth Ġtokens Ġwhen Ġunknown Ġerror Ġoccur res ĊĠĠĠĠĠ Ġif Ġ(! settings Repository . save Firebase Token ( null )) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠDatabase Exception (" Could Ġnot Ġreset Ġfirebase Ġtoken ") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ(! settings Repository . save New Firebase Token ( null )) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠDatabase Exception (" Could Ġnot Ġreset Ġfirebase Ġtoken ") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġthrow Ġerror ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }