package Ġit . il ker . repeat card . ui . directories Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġit . il ker . repeat card . db . Flash card Database Ċ import Ġit . il ker . repeat card . db . directory . Directory Ċ import Ġit . il ker . repeat card . db . directory . Flash card Directory Repository Ċ import Ġit . il ker . repeat card . db . flash card . Flash card Repository Ċ import Ġit . il ker . repeat card . db . notification . Notification Ċ import Ġit . il ker . repeat card . db . notification . Notification Repository Ċ import Ġit . il ker . repeat card . ui . util . exhaustive Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . th reet en . bp . Offset DateTime Ċ import Ġorg . th reet en . bp . Zone Id Ċ import Ġorg . th reet en . bp . format . DateTime Formatter Ċ import Ġorg . th reet en . bp . format . Format Style Ċ Ċ const Ġval ĠDEFAULT _ DIRECTORY _ NAME Ġ= Ġ" Mis cellaneous " Ċ Ċ sealed Ġclass ĠDirect ories Event Ġ{ ĊĠĠĠ Ġdata Ġclass ĠAdd Directories ( val Ġdirectory : ĠDirectory ) Ġ: ĠDirect ories Event () ĊĠĠĠ Ġdata Ġclass ĠDelete Directories ( val Ġid : ĠInt ) Ġ: ĠDirect ories Event () Ċ } Ċ Ċ sealed Ġclass ĠDirect ories State Ġ{ ĊĠĠĠ Ġobject ĠLoading Ġ: ĠDirect ories State () ĊĠĠĠ Ġdata Ġclass ĠError ( val Ġerror : ĠThrowable ) Ġ: ĠDirect ories State () ĊĠĠĠ Ġdata Ġclass ĠSuccess ( val Ġdirectories : ĠList < Directory >) Ġ: ĠDirect ories State () Ċ } Ċ Ċ @ Experimental Cor outines Api Ċ class ĠDirect ories ViewModel ( context : ĠContext ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepository : ĠFlash card Directory Repository ĊĠĠĠ Ġprivate Ġval Ġflash card Repository : ĠFlash card Repository ĊĠĠĠ Ġprivate Ġval Ġlogs Repository : ĠNotification Repository ĊĊĠĠĠ Ġprivate Ġvar Ġ_ directories State Ġ= ĠMutable State Flow < Directories State >( Directories State . Loading ) ĊĠĠĠ Ġval Ġdirectories State ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ directories State ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdirectories Dao Ġ= ĠFlash card Database . get Database ( context ). directory Dao () ĊĠĠĠĠĠĠĠ Ġval Ġflash card Dao Ġ= ĠFlash card Database . get Database ( context ). flash card Dao () ĊĠĠĠĠĠĠĠ Ġval Ġlogs Dao Ġ= ĠFlash card Database . get Database ( context ). notifications Dao () ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠFlash card Directory Repository ( directories Dao ) ĊĠĠĠĠĠĠĠ Ġflash card Repository Ġ= ĠFlash card Repository ( flash card Dao ) ĊĠĠĠĠĠĠĠ Ġlogs Repository Ġ= ĠNotification Repository ( logs Dao ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirectories Ġ= Ġrepository . get Directories () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( directories . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectories State . value Ġ= ĠDirect ories State . Error ( NullPointerException ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectories State . value Ġ= ĠDirect ories State . Success ( directories ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend ( event : ĠDirect ories Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDirect ories Event . Add Directories Ġ-> Ġinsert ( event . directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDirect ories Event . Delete Directories Ġ-> Ġdelete Directory ( event . id ) ĊĠĠĠĠĠĠĠ Ġ}. exhaustive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Directory ( id : ĠInt ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDis associate Ġany ĠFlash card Ġbefore Ġdeleting ĊĠĠĠĠĠĠĠ Ġval Ġflash cards Ġ= Ġrepository . get Directory Content ( id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( flash cards . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflash cards . forEach Ġ{ Ġflash card Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated Ġ= Ġflash card . copy ( directory Id Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash card Repository . update Flash card ( updated ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrepository . delete Directory ( id ) ĊĠĠĠĠĠĠĠ Ġlogs Repository . insert Notification ( create Notification (" Deleted Ġdirectory ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert ( directory : ĠDirectory ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdirectories Ġ= Ġrepository . get Directories () ĊĠĠĠĠĠĠĠ Ġvar Ġcan Add Directory Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġdirectories . forEach Ġ{ Ġexisting Directory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Directory . title Ġ== Ġdirectory . title ) Ġcan Add Directory Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( can Add Directory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . add Directory ( directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogs Repository . insert Notification ( create Notification (" Added Ġdirectory ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification ( title : ĠString ): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Id Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Title Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Type Ġ= Ġ" directory ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Date Ġ= ĠOffset DateTime . now (). format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Formatter . of Localized DateTime ( Format Style . MEDIUM , ĠFormat Style . MEDIUM ). with Zone ( Zone Id . system Default ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ