From 15296b8832c1ffbfcdd444edc7cce547896fb99c Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Fri, 19 Jul 2024 20:05:42 +0200 Subject: [PATCH] Now files from repo are cached to be quickly retrieved even offline --- src/data/DataType.enum.ts | 1 + src/modules/repo/models/SavedRepo.ts | 9 ++++++++ src/modules/repo/store/userRepo.store.ts | 29 ++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/modules/repo/models/SavedRepo.ts diff --git a/src/data/DataType.enum.ts b/src/data/DataType.enum.ts index 71c2048..544731f 100644 --- a/src/data/DataType.enum.ts +++ b/src/data/DataType.enum.ts @@ -1,6 +1,7 @@ export enum DataType { GithubAccessToken = 'GithubAccessToken', FavoriteRepo = 'FavoriteRepo', + SavedRepo = 'SavedRepo', Note = 'Note', BacklinkNote = 'BacklinkNote', RepetitionCard = 'RepetitionCard', diff --git a/src/modules/repo/models/SavedRepo.ts b/src/modules/repo/models/SavedRepo.ts new file mode 100644 index 0000000..d85b9cd --- /dev/null +++ b/src/modules/repo/models/SavedRepo.ts @@ -0,0 +1,9 @@ +import { DataType } from '@/data/DataType.enum' +import { Model } from '@/data/models/Model' +import { RepoFile } from '@/modules/repo/interfaces/RepoFile' + +export interface SavedRepo extends Model { + user: string + repo: string + files: RepoFile[] +} diff --git a/src/modules/repo/store/userRepo.store.ts b/src/modules/repo/store/userRepo.store.ts index 7330186..46856df 100644 --- a/src/modules/repo/store/userRepo.store.ts +++ b/src/modules/repo/store/userRepo.store.ts @@ -4,6 +4,7 @@ import { data } from '@/data/data' import { DataType } from '@/data/DataType.enum' import { RepoFile } from '@/modules/repo/interfaces/RepoFile' import { UserSettings } from '@/modules/repo/interfaces/UserSettings' +import { SavedRepo } from '@/modules/repo/models/SavedRepo' import { getCachedMainReadme, getFiles, @@ -39,6 +40,11 @@ export const useUserRepoStore = defineStore({ this.user = user this.repo = repo + const savedRepoId = data.generateId(DataType.SavedRepo, `${user}-${repo}`) + this.files = + (await data.get(savedRepoId))?.files ?? + [] + try { await refreshToken() } catch (error) { @@ -56,7 +62,14 @@ export const useUserRepoStore = defineStore({ } getFiles(user, repo) - .then((files) => { + .then(async (files) => { + data.update({ + _id: savedRepoId, + $type: DataType.SavedRepo, + repo, + user, + files + }) this.files = files return getUserSettingsContent(user, repo, files) }) @@ -87,7 +100,19 @@ export const useUserRepoStore = defineStore({ }) }, addFile(file: RepoFile) { - this.files = [...this.files.filter((f) => f.sha !== file.sha), file] + const savedRepoId = data.generateId( + DataType.SavedRepo, + `${this.user}-${this.repo}` + ) + const newFiles = [...this.files.filter((f) => f.sha !== file.sha), file] + data.update({ + _id: savedRepoId, + $type: DataType.SavedRepo, + repo: this.repo, + user: this.user, + files: newFiles + }) + this.files = newFiles }, resetUserRepo() { this.user = ''