package Ġcom . dic hes . d ich box mobile . mv . boxes DataManager . view States Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . dic hes . d ich box mobile . datat ypes . Boxes Container Ċ import Ġcom . dic hes . d ich box mobile . mv . Clean able Ċ Ċ class ĠOpen ed Files ViewModel Ġ: ĠViewModel (), ĠClean able Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata Ġ= ĠMutable LiveData < List < Boxes Container . Opened File >>() ĊĠĠĠ Ġval Ġlive Data : ĠLive Data < List < Boxes Container . Opened File >> Ġ= Ġdata ĊĊĠĠĠ Ġfun Ġadd New File ( file : ĠBox es Container . Opened File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġdata . value ?. map Ġ{ Ġit . copy ( opened Ġ= Ġfalse ) Ġ} ?. to Mutable List () Ġ?: Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġnew List . add ( 0 , Ġfile ) ĊĠĠĠĠĠĠĠ Ġif Ġ( new List . size Ġ> Ġ 1 0 ) Ġnew List . remove Last () ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġnew List . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen File ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġdata . value ?. map Indexed Ġ{ Ġi , Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . copy ( opened Ġ= Ġi Ġ== Ġindex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose File ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . value Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġopened Files Ġ= Ġdata . value !!. size ĊĠĠĠĠĠĠĠ Ġif Ġ( opened Files Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwas Opened Ġ= Ġdata . value ! ![ index ]. opened ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ= Ġdata . value !!. to Mutable List () ĊĠĠĠĠĠĠĠ Ġnew List . remove At ( index ) ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġif Ġ(! was Opened ) Ġnew List Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Opened Ġ= Ġif Ġ( index Ġ+ Ġ 1 Ġ>= Ġopened Files ) Ġindex Ġ- Ġ 1 Ġelse Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew List . map Indexed Ġ{ Ġi , Ġopened File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġnext Opened ) Ġopened File . copy ( opened Ġ= Ġtrue ) Ġelse Ġopened File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġedit File ( name : ĠString , ĠfilePath : ĠString , Ġedited : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġdata . value ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . name Ġ== Ġname Ġ&& Ġit . filePath Ġ=== ĠfilePath ) Ġit . copy ( edited Ġ= Ġedited ) Ġelse Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset View Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġdata . value ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . edited Ġ!= Ġnull ) Ġit . copy ( edited Ġ= Ġnull ) Ġelse Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite Files ( opened Only : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġdata . value ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġeditable Ġ= Ġit . edited Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( opened Only ) Ġeditable Ġ= Ġeditable Ġ&& Ġit . opened ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( editable ) Ġit . copy ( src Ġ= Ġit . edited !! , Ġedited Ġ= Ġnull ) Ġelse Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrename File ( index : ĠInt , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġdata . value ?. map Indexed Ġ{ Ġi , Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġindex ) Ġfile . copy ( name Ġ= Ġname ) Ġelse Ġfile ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrename Paths ( old Path : ĠString , Ġnew Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . value Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġdata . value ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Path Ġ= Ġit . filePath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Path . startsWith ( old Path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunchanged Part Ġ= Ġif Ġ( old Path . length Ġ>= Ġcurrent Path . length ) Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcurrent Path . slice ( old Path . indices ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodified Path Ġ= Ġnew Path Ġ+ Ġunchanged Part ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( filePath Ġ= Ġmodified Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose By Path ( dir Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . value Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġleft Path Ġ= Ġif Ġ( dir Path . startsWith ('/ ')) Ġdir Path Ġelse Ġ"/ $ dir Path " ĊĠĠĠĠĠĠĠ Ġval Ġremain ed Ġ= Ġdata . value !!. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfull Path Ġ= Ġit . filePath Ġ+ Ġ'/' Ġ+ Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! fullPath . startsWith ( left Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( remain ed . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġremain ed Opened Ġ= Ġremain ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . opened Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. reduce Ġ{ Ġacc , Ġopened Ġ-> Ġacc Ġ|| Ġopened Ġ} ĊĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġif Ġ( remain ed Opened ) Ġremain ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġremain ed . map Indexed Ġ{ Ġindex , Ġopened File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġopened File . copy ( opened Ġ= Ġtrue ) Ġelse Ġopened File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . value Ġ!= Ġnull ) Ġdata . value Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ