package Ġcom . flip per devices . archive . impl . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . flip per devices . archive . api . Category Api Ċ import Ġcom . flip per devices . archive . impl . R Ċ import Ġcom . flip per devices . archive . impl . di . Archive Component Ċ import Ġcom . flip per devices . archive . impl . model . Category Item Ċ import Ġcom . flip per devices . archive . model . Category Type Ċ import Ġcom . flip per devices . bridge . dao . api . deleg ates . Key Api Ċ import Ġcom . flip per devices . bridge . dao . api . model . Flip per FileType Ċ import Ġcom . flip per devices . core . di . Component Holder Ċ import Ġcom . flip per devices . core . k tx . jre . map Ċ import Ġcom . github . ter r ak ok . c icer one . Router Ċ import Ġjava . util . TreeMap Ċ import Ġjavax . inject . Inject Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġkotlinx . coroutines . flow . update Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠCategory ViewModel ( ĊĠĠĠ Ġapplication : ĠApplication Ċ ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdeleted Category Name Ġ= Ġapplication . getString ( R . string . archive _ tab _ deleted ) ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġkey Api : ĠKey Api ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġcategory Api : ĠCategory Api ĊĊĠĠĠ Ġprivate Ġval Ġcategories Flow Ġ= ĠMutable State Flow < Map < Flip per FileType , ĠCategory Item >>( ĊĠĠĠĠĠĠĠ ĠFlip per FileType . values (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġto ĠCategory Item ( it . icon , Ġit . human Readable Name , Ġnull , ĠCategory Type . By FileType ( it )) ĊĠĠĠĠĠĠĠ Ġ}. toMap ( TreeMap ()) ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġdeleted Category Flow Ġ= ĠMutable State Flow ( ĊĠĠĠĠĠĠĠ ĠCategory Item ( null , Ġdeleted Category Name , Ġnull , ĠCategory Type . Deleted ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠComponent Holder . component < Archive Component >(). inject ( this ) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe On Categories Count () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Deleted Flow (): ĠState Flow < Category Item > Ġ= Ġdeleted Category Flow ĊĊĠĠĠ Ġfun Ġget Categories Flow (): ĠState Flow < List < Category Item >> Ġ= Ġcategories Flow . map ( viewModel Scope ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit . values . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Category Click ( router : ĠRouter , Ġcategory Item : ĠCategory Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . navigate To ( category Api . get Category Screen ( category Item . category Type )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsubscribe On Categories Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġkey Api . get Deleted Key As Flow (). on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeleted Category Flow . emit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġdeleted Category Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġit . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Type Ġ= ĠCategory Type . Deleted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. launch In ( viewModel Scope ) ĊĊĠĠĠĠĠĠĠ ĠFlip per FileType . values (). forEach Ġ{ ĠfileType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Api . get Exist Keys As Flow ( fileType ). on Each Ġ{ Ġkeys Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories Flow . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Map Ġ= ĠTreeMap ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map [ fileType ] Ġ= ĠCategory Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfileType . icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfileType . human Readable Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Type Ġ= ĠCategory Type . By FileType ( fileType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ update Ġmutable Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. launch In ( viewModel Scope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ