Skip to content

Commit 546ac09

Browse files
committed
feat(files): cache files tree on browser
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
1 parent da13836 commit 546ac09

1 file changed

Lines changed: 27 additions & 4 deletions

File tree

apps/files/src/store/paths.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import type { Folder, Node } from '@nextcloud/files'
77
import type { FileSource, PathOptions, PathsStore, Service, ServicesState } from '../types.ts'
88

9+
import { getBuilder } from '@nextcloud/browser-storage'
910
import { subscribe } from '@nextcloud/event-bus'
1011
import { File, FileType, getNavigation } from '@nextcloud/files'
1112
import { dirname } from '@nextcloud/paths'
@@ -14,10 +15,8 @@ import Vue from 'vue'
1415
import logger from '../logger.ts'
1516
import { useFilesStore } from './files.ts'
1617

17-
/**
18-
*
19-
* @param args
20-
*/
18+
const browserStorage = getBuilder('files').build()
19+
2120
export function usePathsStore(...args) {
2221
const files = useFilesStore(...args)
2322

@@ -164,8 +163,32 @@ export function usePathsStore(...args) {
164163
subscribe('files:node:deleted', pathsStore.onDeletedNode)
165164
subscribe('files:node:moved', pathsStore.onMovedNode)
166165

166+
// Restore from browser storage
167+
if (browserStorage.getItem('paths')) {
168+
try {
169+
const data = browserStorage.getItem('paths')
170+
if (!data) {
171+
throw new Error('No data found in browser storage for paths')
172+
}
173+
174+
const storedPaths = JSON.parse(data) as ServicesState
175+
pathsStore.$state.paths = storedPaths || {}
176+
logger.info('Restored paths store from browser storage', { storedPaths })
177+
} catch (e) {
178+
logger.info('Failed to restore paths store from browser storage', { error: e })
179+
}
180+
}
181+
167182
pathsStore._initialized = true
168183
}
169184

185+
pathsStore.$subscribe((_mutation, state: PathsStore) => {
186+
try {
187+
browserStorage.setItem('paths', JSON.stringify(state.paths))
188+
} catch (e) {
189+
logger.error('Failed to persist paths store to browser storage', { error: e })
190+
}
191+
})
192+
170193
return pathsStore
171194
}

0 commit comments

Comments
 (0)