fix: distinct multiple layer of cache
This commit is contained in:
@@ -18,19 +18,20 @@ export const useFile = (sha: Ref<string> | string, retrieveContent = true) => {
|
||||
renderFromUTF8,
|
||||
getRawContent: getRawContentFromFile
|
||||
} = useMarkdown(toValue(sha))
|
||||
|
||||
const { getCachedNote, saveCacheNote } = prepareNoteCache(
|
||||
toValue(sha),
|
||||
toValue(path)
|
||||
)
|
||||
const fromCache = ref(false)
|
||||
|
||||
const fromCache = ref(false)
|
||||
const rawContent = ref('')
|
||||
const content = computed(() =>
|
||||
rawContent.value ? renderFromUTF8(rawContent.value) : ''
|
||||
)
|
||||
|
||||
const getEditedSha = async () => {
|
||||
const note = await getCachedNote()
|
||||
const { note } = await getCachedNote()
|
||||
|
||||
if (!note) {
|
||||
return null
|
||||
@@ -40,26 +41,38 @@ export const useFile = (sha: Ref<string> | string, retrieveContent = true) => {
|
||||
}
|
||||
|
||||
const getCachedFileContent = async (): Promise<string | null> => {
|
||||
const cachedNote = await getCachedNote()
|
||||
const { note: cachedNote, from } = await getCachedNote()
|
||||
|
||||
fromCache.value = !!cachedNote
|
||||
|
||||
if (cachedNote) {
|
||||
if (from === 'path') {
|
||||
queryFileContent(store.user, store.repo, toValue(sha)).then(
|
||||
(fileContent) => {
|
||||
if (!fileContent) {
|
||||
return
|
||||
}
|
||||
saveCacheNote(fileContent)
|
||||
rawContent.value = getRawContentFromFile(fileContent)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
return cachedNote.content
|
||||
}
|
||||
|
||||
const contentFile = await queryFileContent(
|
||||
const fileContent = await queryFileContent(
|
||||
store.user,
|
||||
store.repo,
|
||||
toValue(sha)
|
||||
)
|
||||
|
||||
if (!contentFile) {
|
||||
if (!fileContent) {
|
||||
return null
|
||||
}
|
||||
|
||||
saveCacheNote(contentFile)
|
||||
return contentFile
|
||||
saveCacheNote(fileContent)
|
||||
return fileContent
|
||||
}
|
||||
|
||||
const getRawContent = async () => {
|
||||
|
||||
@@ -32,9 +32,9 @@ export const useOfflineNote = () => {
|
||||
file.path
|
||||
)
|
||||
|
||||
const isNoteCached = (await getCachedNote()) !== null
|
||||
const { from } = await getCachedNote()
|
||||
|
||||
if (isNoteCached) {
|
||||
if (from === 'sha') {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
26
src/modules/note/cache/prepareNoteCache.ts
vendored
26
src/modules/note/cache/prepareNoteCache.ts
vendored
@@ -3,23 +3,41 @@ import { DataType } from '@/data/DataType.enum'
|
||||
import { Note } from '@/modules/note/models/Note'
|
||||
import { useUserRepoStore } from '@/modules/repo/store/userRepo.store'
|
||||
|
||||
type NoteCacheResult =
|
||||
| {
|
||||
note: Note
|
||||
from: 'sha'
|
||||
}
|
||||
| { note: Note; from: 'path' }
|
||||
| { note: null; from: null }
|
||||
|
||||
export const prepareNoteCache = (sha: string, path?: string) => {
|
||||
const store = useUserRepoStore()
|
||||
|
||||
const noteId = data.generateId(DataType.Note, sha)
|
||||
const notePath = path ? data.generateId(DataType.Note, path) : null
|
||||
const getCachedNote = async () => {
|
||||
const getCachedNote = async (): Promise<NoteCacheResult> => {
|
||||
const note = await data.get<DataType.Note, Note>(noteId)
|
||||
|
||||
if (note) {
|
||||
return note
|
||||
return { note, from: 'sha' }
|
||||
}
|
||||
|
||||
if (notePath) {
|
||||
return data.get<DataType.Note, Note>(notePath)
|
||||
const note = await data.get<DataType.Note, Note>(notePath)
|
||||
if (!note) {
|
||||
return {
|
||||
note: null,
|
||||
from: null
|
||||
}
|
||||
}
|
||||
return {
|
||||
note,
|
||||
from: 'path'
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
return { note: null, from: null }
|
||||
}
|
||||
|
||||
const saveCacheNote = async (
|
||||
|
||||
@@ -44,7 +44,7 @@ export const getCachedMainReadme = async (owner: string, repo: string) => {
|
||||
const { render } = useMarkdown()
|
||||
|
||||
const { getCachedNote } = prepareNoteCache(`${owner}-${repo}-README`)
|
||||
const cachedReadme = await getCachedNote()
|
||||
const { note: cachedReadme } = await getCachedNote()
|
||||
|
||||
if (!cachedReadme) {
|
||||
return null
|
||||
@@ -77,7 +77,7 @@ export const getMainReadme = async (owner: string, repo: string) => {
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn(error)
|
||||
const cachedReadme = await getCachedNote()
|
||||
const { note: cachedReadme } = await getCachedNote()
|
||||
|
||||
if (cachedReadme) {
|
||||
return render(cachedReadme.content)
|
||||
|
||||
Reference in New Issue
Block a user