fix(offline): don't abort cache loop on a single fetch failure
A single null from queryFileContent silently exited cacheAllNotes, leaving every later note uncached while the success toast still fired. Skip the failing file, count failures, and surface them via errorMessage.
This commit is contained in:
@@ -13,6 +13,7 @@ export const useOfflineNotes = () => {
|
|||||||
const totalOfNotes = computed(() => store.files.length)
|
const totalOfNotes = computed(() => store.files.length)
|
||||||
|
|
||||||
const noteCompleted = ref(0)
|
const noteCompleted = ref(0)
|
||||||
|
const failedNotes = ref(0)
|
||||||
|
|
||||||
const cacheAllNotes = async () => {
|
const cacheAllNotes = async () => {
|
||||||
const isInitialized = store.user && store.repo && totalOfNotes.value > 0
|
const isInitialized = store.user && store.repo && totalOfNotes.value > 0
|
||||||
@@ -30,6 +31,7 @@ export const useOfflineNotes = () => {
|
|||||||
const cachedNotesSet = new Set(cachedNotesFromSha.map((note) => note._id))
|
const cachedNotesSet = new Set(cachedNotesFromSha.map((note) => note._id))
|
||||||
|
|
||||||
noteCompleted.value = 0
|
noteCompleted.value = 0
|
||||||
|
failedNotes.value = 0
|
||||||
|
|
||||||
for (const file of store.files) {
|
for (const file of store.files) {
|
||||||
noteCompleted.value++
|
noteCompleted.value++
|
||||||
@@ -50,7 +52,8 @@ export const useOfflineNotes = () => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (!contentFile) {
|
if (!contentFile) {
|
||||||
return null
|
failedNotes.value++
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
saveCacheNote(contentFile)
|
saveCacheNote(contentFile)
|
||||||
@@ -64,6 +67,7 @@ export const useOfflineNotes = () => {
|
|||||||
cacheAllNotes: execute,
|
cacheAllNotes: execute,
|
||||||
isLoading,
|
isLoading,
|
||||||
totalOfNotes,
|
totalOfNotes,
|
||||||
noteCompleted
|
noteCompleted,
|
||||||
|
failedNotes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,20 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useOfflineNotes } from "@/hooks/useOfflineNotes.hook"
|
import { useOfflineNotes } from "@/hooks/useOfflineNotes.hook"
|
||||||
import { confirmMessage } from "@/utils/notif"
|
import { confirmMessage, errorMessage } from "@/utils/notif"
|
||||||
|
|
||||||
const { cacheAllNotes, isLoading, totalOfNotes, noteCompleted } =
|
const { cacheAllNotes, isLoading, totalOfNotes, noteCompleted, failedNotes } =
|
||||||
useOfflineNotes()
|
useOfflineNotes()
|
||||||
|
|
||||||
const confirmBeforeCachingAllNotes = async () => {
|
const confirmBeforeCachingAllNotes = async () => {
|
||||||
confirm("Do you want to cache all notes?")
|
confirm("Do you want to cache all notes?")
|
||||||
await cacheAllNotes()
|
await cacheAllNotes()
|
||||||
confirmMessage("✅ All notes have been locally saved")
|
if (failedNotes.value > 0) {
|
||||||
|
errorMessage(
|
||||||
|
`${failedNotes.value} of ${totalOfNotes.value} note(s) could not be cached — try again`
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
confirmMessage("✅ All notes have been locally saved")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user