package Ġcom . example . kit aab . ViewModel Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . example . kit aab . Model . Fav Book Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . database .* Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ Ċ class ĠUser Library ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdatabase Ref : ĠFirebase Database Ġ= ĠFirebase Database . getInstance () ĊĠĠĠ Ġprivate Ġval Ġdata Ref : ĠDatabase Reference Ġ= Ġdatabase Ref . reference ĊĠĠĠ Ġprivate Ġval Ġstorage : ĠFirebase Storage Ġ= ĠFirebase Storage . getInstance () ĊĠĠĠ Ġprivate Ġval Ġstorage Ref Ġ= Ġstorage . reference ĊĠĠĠ Ġprivate Ġval Ġm Auth : ĠFirebase Auth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠ Ġval ĠuserId Ġ= Ġm Auth . currentUser !!. uid ĊĠĠĠ Ġvar Ġfav List Ġ= ĠMutable LiveData < List < Fav Book >>() ĊĠĠĠ Ġvar Ġself Published List Ġ= ĠMutable LiveData < List < Fav Book >>() ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġobject : ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( snapshot : ĠData Snapshot ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// contains Ġuser 's Ġfavour ites Ġlist Ġof Ġbooks Ġ( data Ġobject Ġof ĠF av Book ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp List 1 : ĠMutable List < Fav Book > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// contains Ġbooks Ġuploaded Ġby Ġthe Ġuser Ġ( data Ġobject Ġof ĠF av Book ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp List 2 : ĠMutable List < Fav Book > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// retrieve Ġbook Ġdetails Ġfrom Ġuser Ġlibrary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfav Books Ġ= Ġsnapshot . child (" users /$ userId / user _ library ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( snap Ġin Ġfav Books . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= Ġsnap . child (" book "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Id Ġ= Ġsnap . child (" book Id "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbookmark Ġ= Ġsnap . child (" bookmark "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġsnap . child (" cover Img "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenre Ġ= Ġsnap . child (" genre "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġsnap . child (" filename "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġself Ġ= Ġsnap . child (" self "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// self Ġyes Ġ- Ġbooks Ġpublished Ġby Ġuser , Ġno Ġ- Ġadded Ġfrom Ġmain Ġlibrary Ġto Ġfav Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( self Ġ== Ġ" no ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp List 1 . add ( Fav Book ( book , Ġbook Id , Ġbookmark , Ġfilename , Ġimage , Ġgenre , Ġself )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp List 2 . add ( Fav Book ( book , Ġbook Id , Ġbookmark , Ġfilename , Ġimage , Ġgenre , Ġself )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfav List . value Ġ= Ġtemp List 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Published List . value Ġ= Ġtemp List 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata Ref . add Value EventListener ( data ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// called Ġwhen Ġuser Ġremoves Ġa Ġbook Ġfrom Ġfav Ġlist ĊĠĠĠ Ġfun Ġremove From Fav ( genre : ĠString , Ġbook Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ref 2 Ġ= Ġdatabase Ref . getReference (" users /$ userId / user _ library ") ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġobject : ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( snap Ġin Ġsnapshot . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// a Ġbook Ġis Ġuniquely Ġidentified Ġby Ġits Ġgenre Ġand Ġid Ġand Ġremoved Ġfrom Ġuser Ġlibrary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( snap . child (" genre "). value Ġ== Ġgenre Ġ&& Ġsnap . child (" book Id "). value Ġ== Ġbook Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Ġ= Ġdatabase Ref . getReference (" users /$ userId / user _ library ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref . child ("${ snap . key } "). remove Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata Ref 2 . add Value EventListener ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// called Ġwhen Ġuser Ġwants Ġto Ġdelete Ġpublished Ġbook Ġfrom Ġdatabase ĊĠĠĠ Ġfun Ġdelete Book ( genre : ĠString , Ġbook Id : ĠString , Ġimg : ĠString , Ġfilename : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// function Ġcall Ġto Ġremove Ġbook Ġfrom Ġuser Ġlibrary ĊĠĠĠĠĠĠĠ Ġremove From Fav ( genre , book Id ) ĊĊĠĠĠĠĠĠĠ Ġ// to Ġremove Ġbook Ġfrom Ġmain Ġlibrary ĊĠĠĠĠĠĠĠ Ġval Ġdata Ref 3 Ġ= Ġdatabase Ref . getReference (" books /$ genre ") ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġobject : ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( snap Ġin Ġsnapshot . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( snap . key Ġ== Ġbook Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Ġ= Ġdatabase Ref . getReference (" books /$ genre ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref . child ("$ book Id "). remove Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata Ref 3 . add Value EventListener ( data ) ĊĊĠĠĠĠĠĠĠ Ġ// Delete Ġfiles Ġfrom Ġfirebase Ġstorage ĊĠĠĠĠĠĠĠ Ġval Ġimage Ref Ġ= Ġstorage Ref . child ( img ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ref Ġ= Ġstorage Ref . child ( filename ) ĊĠĠĠĠĠĠĠ Ġimage Ref . delete () ĊĠĠĠĠĠĠĠ Ġfile Ref . delete () ĊĠĠĠ Ġ} Ċ Ċ }